首頁 >後端開發 >php教程 >Drupal進行社交:在Drupal中建立一個'喜歡”模塊

Drupal進行社交:在Drupal中建立一個'喜歡”模塊

William Shakespeare
William Shakespeare原創
2025-02-18 09:03:10987瀏覽

>本文演示瞭如何構建Drupal模塊,使用戶使用jQuery Ajax“喜歡”帖子,要求保存異步數據。

>

Drupal goes Social: Building a

密鑰功能:

    通過jQuery ajax。
  • > likes的數據庫存儲(每個用戶,每個帖子)。
  • >
  • 實時類似於計數更新。
  • clear ui表示/不同的狀態。
>模塊創建:

在您的Drupal安裝中創建
    文件夾。
  1. 內部likepost,創建sites/all/modules/custom
  2. >
  3. likepost likepost.info
  4. create
:(初始
<code>name = likepost
description = Allows users to like Drupal posts.
core = 7.x</code>
實現下麵包括以進行完整性,但核心功能將在後面添加)
  1. likepost.module hook_help創建
  2. 來定義數據庫架構:
<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>
  1. >安裝模塊。 將創建likepost.install表。
  2. >
<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

> ajax處理(akepost.module):

Drupal goes Social: Building a >將以下函數添加到

>

>顯示“喜歡”按鈕(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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn