首页 >后端开发 >php教程 >Drupal进行社交:在Drupal中建立一个'喜欢”模块

Drupal进行社交:在Drupal中建立一个'喜欢”模块

William Shakespeare
William Shakespeare原创
2025-02-18 09:03:10981浏览

>本文演示了如何构建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