所以这可能是一个黑暗的镜头,但对于那些知道一点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);
但我不确定除了创建实例并将其自身附加到节点之外,它还能做什么。为什么它显示它的位置(作为编辑旁边的选项)?
全部谢谢!
答案 0 :(得分:1)
当你说“作为编辑旁边的选项”时,我不确定你所指的是什么,但你上传的代码(以及仔细检查书本身,使用的代码)不会导致这种情况。实际上,当您编辑启用了注释的节点时,您应该只看到正文字段下方的字段:
仅在编辑现有节点时(而不是在创建新节点时)显示的原因与您关于它的第一个问题相关,而不是让所有用户都注释该节点:在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模块开发。