我如何使用drupal创建堆栈溢出,如评论系统

时间:2014-08-29 12:52:21

标签: drupal drupal-7 drupal-modules

我对drupal中评论系统的工作方式不太满意。 有什么办法可以使用已知的模块来改变它。 举个例子,如果有人评论并且他从其他成员那里得到最多(投票),他的评论应该首先列出。 希望我明白我的观点。

1 个答案:

答案 0 :(得分:1)

你知道有一个drupal.stackexchange.com吗?我也没有。很酷,是吧?无论如何,关于该SE网站上的这个主题已经有过一些讨论。以下是初学者的一个链接:https://drupal.stackexchange.com/questions/11566/module-for-creating-a-site-similar-to-stack-exchange-sites

[编辑]

更具体地说,这是完全您正在寻找的内容:Rating system for users and posts (and comments)

[Fivestar] [1]和[User Points] [2]可用于此目的,但您只能获得与Stack Overflow类似的内容。
第一个模块(需要[Voting API] [3])可用于允许用户投票,第二个模块可用于转换投票用户的点数(除其他外 - 模块是不限于此)。要集成这两个模块,还有另一个模块,但我不确定它是用户点"或[用户点贡献的模块] [4]的一部分。

Fivestar的问题是允许用户从1到X进行投票(我认为最大投票可以更改),这与Stack Overflow使用的投票系统不同,用户只需报告&# 34;我喜欢它",或者#34;我不喜欢它"。使用Fivestar只会有正面投票,没有人可以投票评论或节点;可以通过给予最低投票来降低平均值。

在我列出的模块之间,没有一个模块可以为节点/注释的作者提供点数;使用"投票API"和"用户点"它可以做到这一点,但我看起来没有模块允许这样做(这意味着你可能可以写一个自定义模块)。

如果查看安装配置文件[ArrayShift] [5]中包含的[模块列表] [6],您可以了解可用于达到相同目的的模块。
模块列表包括

  • [节点评论] [7],它转换完整节点中的注释;例如,使用此模块,可以使用仅适用于具有注释的节点的投票模块。
  • [投票API] [8]。
  • [Vote UP / Down] [9]允许用户进行投票或投票。
  • [用户点数] [10]。
  • [ArrayShift支持模块] [11];该模块很可能包含允许节点作者在每次创建节点时获得积分的代码。

特别是,作为[ArrayShift支持模块] [11](as_tweaks)一部分的模块包含以下代码:

/**
 * Below, a bunch of simple hook implementations that award userpoints based
 * on various events that happen. In theory, Rules module and various other tools
 * could be used to do these things, but most of those modules don't have easy
 * to export/import configuration data.
 */

// VotingAPI hook. When a user casts a vote on a node, the author should
// get/lose points..
function as_tweaks_votingapi_insert($votes) {
  foreach ($votes as $vote) {
    if ($vote['content_type'] == 'node' && ($node = node_load($vote['content_id']))) {
      // Award the points
      userpoints_userpointsapi(array(
        'uid'         => $node->uid,
        'points'      => $vote['value'] * 10,
        'operation'   => 'vote up',
        'entity_id'   => $node->nid,
        'entity_type' => 'node',
      ));
    }
  }
}

// VotingAPI hook. When a user casts a vote on a node, the author should
// get/lose points..
function as_tweaks_votingapi_delete($votes) {
  foreach ($votes as $vote) {
    if ($vote['content_type'] == 'node' && ($node = node_load($vote['content_id']))) {
      // Award the points
      userpoints_userpointsapi(array(
        'uid'         => $node->uid,
        'points'      => $vote['value'] * -10,
        'operation'   => 'vote up',
        'entity_id'   => $node->nid,
        'entity_type' => 'node',
      ));
    }
  }
}