>本文演示瞭如何構建Drupal模塊,使用戶使用jQuery Ajax“喜歡”帖子,要求保存異步數據。
>
密鑰功能:
在您的Drupal安裝中創建
likepost
,創建sites/all/modules/custom
:likepost
likepost.info
<code>name = likepost description = Allows users to like Drupal posts. core = 7.x</code>實現下麵包括以進行完整性,但核心功能將在後面添加)
likepost.module
hook_help
創建<code class="language-php">/** * @file * Main module file. */ /** * Implements hook_help(). */ function likepost_help($path, $arg) { if ($path == 'admin/help#likepost') { $output = '<h3>' . t('About') . '</h3>'; $output .= '<p>' . t('This module allows users to like posts in Drupal.') . '</p>'; return $output; } }</code>
likepost.install
表。 <code class="language-php"><?php /** * Implements hook_schema(). */ function likepost_schema() { $schema['likepost_table_for_likes'] = array( 'description' => t('Stores post likes.'), 'fields' => array( 'userid' => array( 'type' => 'int', 'not null' => TRUE, 'default' => 0, 'description' => t('User ID'), ), 'nodeid' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, 'description' => t('Node ID'), ), ), 'primary key' => array('userid', 'nodeid'), ); return $schema; }</code>
likepost_table_for_likes
>將以下函數添加到
>
>顯示“喜歡”按鈕(akepost.module):
likepost.module
<code class="language-php">/** * Implements hook_menu(). */ function likepost_menu() { $items['likepost/like/%'] = array( 'title' => 'Like', 'page callback' => 'likepost_like', 'page arguments' => array(2), 'access arguments' => array('access content'), 'type' => MENU_SUGGESTED_ITEM, ); return $items; } function likepost_like($nodeid) { $nodeid = (int) $nodeid; global $user; $like = likepost_get_like($nodeid, $user->uid); if ($like) { db_delete('likepost_table_for_likes') ->condition('userid', $user->uid) ->condition('nodeid', $nodeid) ->execute(); $like = 0; } else { db_insert('likepost_table_for_likes') ->fields(array( 'userid' => $user->uid, 'nodeid' => $nodeid, )) ->execute(); $like = 1; } $total_count = likepost_get_total_like($nodeid); drupal_json_output(array( 'like_status' => $like, 'total_count' => $total_count, )); } function likepost_get_total_like($nid) { $total_count = db_query('SELECT COUNT(*) FROM {likepost_table_for_likes} WHERE nodeid = :nodeid', array(':nodeid' => $nid))->fetchField(); return (int) $total_count; } function likepost_get_like($nodeid, $userid) { $like = db_query('SELECT COUNT(*) FROM {likepost_table_for_likes} WHERE nodeid = :nodeid AND userid = :userid', array(':nodeid' => $nodeid, ':userid' => $userid))->fetchField(); return (int) $like; }</code>>樣式(akepost.css):
jQuery(akepost.js):
<code class="language-php">/** * Implements hook_node_view(). */ function likepost_node_view($node, $view_mode) { if ($view_mode == 'full') { $node->content['likepost_display'] = array( '#markup' => display_like_post_details($node->nid), '#weight' => 100, ); $node->content['#attached']['js'][] = array( 'data' => drupal_get_path('module', 'likepost') . '/likepost.js', ); $node->content['#attached']['css'][] = array( 'data' => drupal_get_path('module', 'likepost') . '/likepost.css', ); } } function display_like_post_details($nid) { global $user; $totalLike = likepost_get_total_like($nid); $hasCurrentUserLiked = likepost_get_like($nid, $user->uid); return theme('like_post', array( 'nid' => $nid, 'totalLike' => $totalLike, 'hasCurrentUserLiked' => $hasCurrentUserLiked, )); } /** * Implements hook_theme(). */ function likepost_theme() { $themes = array( 'like_post' => array( 'arguments' => array('nid', 'totalLike', 'hasCurrentUserLiked'), ), ); return $themes; } function theme_like_post($arguments) { $nid = $arguments['nid']; $totalLike = $arguments['totalLike']; $hasCurrentUserLiked = $arguments['hasCurrentUserLiked']; global $base_url; $output = '<div>'; $output .= 'Total number of likes on the post are '; $output .= '<div class="total_count">' . $totalLike . '</div>'; $linkText = ($hasCurrentUserLiked == 0) ? 'Like' : 'Unlike'; $output .= l($linkText, $base_url . '/likepost/like/' . $nid, array('attributes' => array('class' => 'like-link'))); $output .= '</div>'; return $output; }</code>
記住進行更改後清除Drupal的緩存。 這種詳細的解釋應允許對喜歡模塊的更強大,可理解的實現。 屏幕截圖是佔位符;您將在Drupal站點中看到實際的模塊輸出。
以上是Drupal進行社交:在Drupal中建立一個'喜歡”模塊的詳細內容。更多資訊請關注PHP中文網其他相關文章!