跳转到主要内容
rli 提交于 26 March 2012

原文链接http://drupal.org/node/1118210

目前为止,我们已经有了一个区块和一个设置表格。区块显示了所能够显示的最多的链接。但是,也许存在更多的链接,我们的区块的大小不够显示。所以我们需要一个页面来显示更多的最近一周所新建的内容。

自定义权限

首先,我们用hook_permission()建立一个定义权限。这个钩子所定义的权限可以在people->Permission页面设置。(http://example.com/admin/people/permissions)只有那些拥有这个权限的用户才能访问我们将要建立的页面

添加下列代码到我们的模块文件:

<?php /** * Implements hook_permission(). */ function current_posts_permission(){ return array( 'access current_posts content' => array( 'title' => t('Access content for the Current posts module'), ) ); } ?>

这个钩子的定义严格遵循了drupal队列的模式。重点在于机器可读的钩子名,他应该和我们要建立的hook_menu()名相同。'title'定义了这个权限的名称,它将出现在权限管理页面。这个名称应该被t()方法所翻译。请参看hook_permission()来查询所有可用的选项参数。

注册URL并为页面方法命名

我们将编辑current_posts_menu()钩子,来建立一个路径和新页面的名称。下面是drupal命名的一个快速提示:如果我们要建立的私有的方法,别的模块基本不会用到的,那么我们用下划线来作为方法名的开头,比如_your_module_name_。如果我们的方法是公开的,其他模块会频繁的用到它,我们也不会频繁的更改它的参数,那么我们不用下划线作为名字的开头,比如your_module_name_。如果我们要执行的是一个钩子,那么我们必须遵循your_module_name_hookname的格式。所以,如果我们没有执行一个钩子,我们已定要检查我们的命名没有恰巧符合一个钩子的格式,否则系统将认为这是一个钩子。

页面的callback是一个非常好的私有方法的例子。所以我们的命名起始与一个下划线+模块名+'page'。把下面的代码作为队列的第二个元素添加到我们的current_posts_menu()方法。确保我们 return $items是方法的最后一行, 记住不要包含php的开始和结束符。

<?php $items['current_posts'] = array( 'title' => 'Current posts', 'page callback' => '_current_posts_page', 'access arguments' => array('access current_posts content'), 'type' => MENU_NORMAL_ITEM, //Will appear in Navigation menu. ); ?>

把这个menu item和前一个menu item做对比。前一个item需要有description作为设置页面的描述。在这里,这是不重要的。因为我们将建立的页面方法不会调用drupal_get_form,我们并没有任何页面参数要传进去。新建的权限将成为我们的access argument。因为我们没有用admin/config路径,所以我们的页面链接将出现在Navigation menu。

检查

激活我们的模块,并检查Navigation menu。我们应该能看到Current posts的链接。如果看不到,请试着清空缓冲,然后再试试。因为我们还没有编写页面方法,所以这个链接将引导我们到一个空白页面,或者错误信息。在继续编写我们的模块前,请记住卸载当前模块。

参考