0

所以这很可能是在黑暗中拍摄,但对于那些了解一点 Drupal 并且更好地实现了 Ch. 中的注释模块的人来说。2 Pro Drupal 7 开发

您知道如何更改注释模块以便所有用户都可以注释吗?目前,只有管理员可以注释,并且它被作为编辑的扩展呈现。

正在使用的特定代码在这个存储库中(几乎直接来自书中):http: //github.com/dsharkey/Drupal-Module-Development--Annotate-Module

此外,我并没有真正看到注释模块是如何被告知呈现的?我相信它是通过以下 PHP 行(来自 annotate.admin.inc):

$instance = array(
          'field_name' => 'annotation',
          'entity_type' => 'node',
          'bundle' => $key,
          'label' => t('Annotation'),
          'widget_type' => 'text_textarea_with_summary',
          'settings' => array('display_summary' => TRUE),
          'display' => array(
            'default' => array(
              'type' => 'text_default',
            ),
            'teaser' => array(
              'type' => 'text_summary_or_trimmed',
            ),
        ),
      );
$instance = field_create_instance($instance);

但我不确定除了创建实例并将自身附加到节点之外还有什么作用。为什么它显示在它的位置(作为编辑旁边的一个选项)?

谢谢大家!

4

1 回答 1

1

当您说“作为编辑旁边的选项”时,我不确定您指的是什么,但是您上传的代码(并仔细检查了书本身,使用的代码)不会导致这种情况。事实上,当您编辑启用了注释的节点时,您应该只会在 body 字段下方看到一个字段:

注释位置

它仅在您编辑现有节点时(而不是在您创建新节点时)显示的原因与您关于它不让所有用户注释节点的第一个问题有关:在hook_node_load()实现中,它专门检查用户是否编辑节点与节点所有者相同;如果不是,它会隐藏注释字段:

/**
* Implements hook_node_load()
*/
function annotate_node_load($nodes, $types) {
  global $user;
  // Check to see if the person viewing the node is the author. If not then
  // hide the annotation.
  foreach ($nodes as $node) {
    if ($user->uid != $node->uid) {
      unset($node->annotation);
    }
  }
}

所以唯一应该看到注释字段的人是所有者。如果您想允许具有编辑权限的任何人注释节点,请删除该功能。

至于允许任何人对节点进行注释作为编辑节点本身的单独功能,这不是示例的内容,并且与所使用的代码完全分开。您将不得不在别处寻找并查看诸如 Drupal.org 项目 Annotate之类的示例以了解如何做到这一点。基本上,注释将是它们自己的独立实体,它们将引用节点,与注释的工作方式大致相同。

但是如果我这么大胆的话,你会遇到Pro Drupal 7 Development的一个大问题,因为它不像以前的版本那样作为开发的参考:它不能很好地解释事情,花费太多时间在次要的事情上没有足够的时间在真正的主要事情上,引入了非常糟糕的做法(包括注释示例中的几个),并且完全错过了 Drupal 7 引入的大部分内容。我建议改为查看Drupal 7 模块开发。

于 2011-02-16T08:26:54.357 回答