2011-02-16 98 views
0

因此,这很可能会在黑暗中拍摄,但那里的人谁知道一点的Drupal和更好的实现了从章的注释模块。 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

我不知道你指当你说“作为未来的选项编辑”到什么,但你上传的代码(仔细检查这本书本身,使用的代码)不会导致该。事实上,你应该看到下面的正文字段的字段,当您编辑与注释的节点启用:

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 Development因为它不像以前的版本那样是一个很好的开发参考:它不能很好地解释事情在小事情上花费太多时间,在重要事情上没有足够时间,介绍非常糟糕的做法(包括注释示例中的几个),并完全忽略了Drupal 7引入的大部分内容。我建议你检查出Drupal 7的模块开发来代替。

+0

真棒回答马克。非常感谢!我一定会看看你推荐的书。除了你所说的关于Pro Drupal 7的内容之外,它还包含了它提供的代码中的错误。 – djs22 2011-02-16 09:28:12