После долгих проб и ошибок я смог заставить страницу работать как дочерний элемент пути 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,
));
}
}
Обратите внимание, что ключ 'name'
того, что я возвращаю в hook_user (), совпадает с ключом после user/%user/category/edit
в моем определении hook_menu (). Я считаю, что это ключ. Вы также получите сообщение об ошибке, если пропустите элемент 'load arguments'
, имеющий именно это значение.
Поэтому я считаю, что в моем случае пользовательская категория будет 'privacy'
- бит после edit
в пути определения пункта меню.
Это ненужное осложнение? Да, так кажется.
Редактировать: Я вижу, как мой коллега Хефокс побил меня, чтобы я ответил на этот вопрос. Я бы не смог разобраться со всем этим без помощи Фокса, поэтому безумный реквизит для Фокса.