9菜单嵌套
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
到目前为止,我们仅仅定义了一个静态菜单项。让我们再添加一个与它相关的子项:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
到目前为止,我们仅仅定义了一个静态菜单项。让我们再添加一个与它相关的子项:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
如果没有在菜单项中定义标题回调的话,Drupal将默认使用t()函数。我们也可以使用title callback键,明确地定义这个回调函数:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
我们知道,Drupal是支持多语言的,它使用t(),st()函数来翻译字符串。所以你可能会想,菜单项中的title键应该是这样定义的:
'title' =>t( '菜单ABC'),
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
到目前为止,在前面的例子中,我们简单的将菜单项的access callback键设置为了TRUE,这意味着所有的用户都可以访问我们的菜单项。一般情况下,通过在模块中使用hook_ permission ()来定义权限,并使用一个函数来检查这些权限,从而实现对菜单的访问控制。这里所用的函数定义在菜单项的access callback键中,一般使用user_access。让我们定义一个名为access abc的权限;如果用户所在角色不具有该权限,当他访问页面http://localhost/thinkindrupal/menu_abc时,就会看到一个“拒绝访问”提示。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
如果我们没有特别指定,那么Drupal会假定我们把页面回调函数放在了module文件中。在Drupal7中,对于每个页面请求,系统通常都会加载所有的module文件,为了尽可能的降低所加载的module文件大小,我们可以把很多回调函数放置在inc文件中。可以使用菜单项中的file键,来指定哪个文件包含了它的回调函数,这样回调函数就不需要放在当前的module文件中了。我们在前面一章中,就曾提到过file键。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
大多数时候,我们可能想将一个URL映射到一个函数上,而不需要创建一个可见的菜单项。例如,你可能在web表单中有一个JavaScript函数,它需要从特定Drupal路径中得到相应的数据,此时可以将这个URL映射到一个回调函数上,而不需要将它放到菜单中。通过将菜单项的类型指定为MENU_CALLBACK,便可轻松实现这一点。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
如果我们不想把这个菜单项放置在导航区块中,而是向放置在主菜单里面,此时我们可以这样:
function menu_abc_menu() {
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
如果我们觉得这个菜单项的放置位置不合适,那么可以使用' weight '来进行相应的调整,增加菜单项的重量,可以使它向下移动;减少菜单项的重量,可以使它向上移动。
function menu_abc_menu() {