我想在用户编辑页面添加一个标签,即user/%/edit/foo
,并使用twitter模块作为模型。在很多使用调试器进行扫描之后,我意识到我需要在我的模块中添加hook_user
函数,以便菜单路由器路径的%user_category
部分可以正常工作
它现在正如预期的那样运作,但我对我刚才所做的事情并没有真正的了解,也没有在任何地方找到好的解释。
任何人都可以向我解释它的含义吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
使用%user_category
时,表示使用该参数(uid)调用user_category_load
函数。
该功能在用户模块中定义。这些函数用作验证,如果False它返回FALSE,它将导致404,但如果它返回其他东西,如用户对象,将传递给该URL的任何回调函数/形式。
在你的情况下,你可能已经使用了%user
来代替那些更简单的user_load,而你不需要做所有额外的事情来制作{{1}传递。
所以user_category_load
会做两件事。
答案 2 :(得分:0)
经过多次试验和错误后,我能够使用以下代码获取user/%/edit
路径的子页面:
<?php
/**
* Implementation of hook_menu().
*/
function noc_profile_privacy_menu() {
return array(
'user/%user_category/edit/privacy' => array(
'title' => 'Portfolio privacy',
'page callback' => 'drupal_get_form',
'page arguments' => array('noc_profile_privacy_form', 1),
'access callback' => 'content_profile_page_access',
'access arguments' => array('profile', 1),
'type' => MENU_LOCAL_TASK,
'load arguments' => array('%map', '%index'),
),
);
}
/**
* Implementation of hook_user().
*/
function noc_profile_privacy_user($op, &$edit, &$account, $category = NULL) {
if ($op === 'categories') {
return array(array(
'name' => 'privacy',
'title' => t('Profile privacy'),
'weight' => 0,
));
}
}
请注意,我在hook_user()中返回的'name'
键与我的hook_menu()定义中的user/%user/category/edit
之后的键相同。我认为这是关键。如果省略'load arguments'
项目,那么您也会收到错误信息。
所以我相信用户类别是我的'privacy'
- 菜单项定义路径中edit
之后的位。
这是不必要的并发症吗?是的,所以看来。
编辑:我看到我的同事hefox打败我回答这个问题。如果没有福克斯的帮助,我就无法想象所有这些,这对福克斯来说是疯狂的道具。