问题来自Pro Drupal 7 Book:Annotate module

时间:2011-02-16 08:01:37

标签: drupal-modules drupal-7 annotate

所以这可能是一个黑暗的镜头,但对于那些知道一点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);

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

全部谢谢!

1 个答案:

答案 0 :(得分:1)

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

Annotations location

仅在编辑现有节点时(而不是在创建新节点时)显示的原因与您关于它的第一个问题相关,而不是让所有用户都注释该节点:在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开发中遇到了一个大问题,因为它不像以前版本的开发参考那么好:它没有'很好地解释事情,花费太多时间处理小事,没有足够的时间处理真正的重大事情,介绍了非常糟糕的做法(包括注释示例中的几个),并完全错过了Drupal 7引入的大部分内容。我建议您查看 Drupal 7模块开发