Хочу вывести свой пункт меню в навигации, который будет вести на страницу изменения ноды типа node/32/edit. Но вот как не стараюсь не выходит. То пункта не видно и возможность изменения ноды исчезает, то ругается. Да и логично ругается так как я переопределяю меню, а мне просто ссылку надо.
<?php
function prostor_menu() {
$items = array();
$items['node/%node/edit'] = array(
'title' => 'Edit my node',
'page arguments' => array(1),
'access arguments' => array('access content'),
);
return $items;
}
?>
Комментарии
hook_menu_alter
Допустим так. Пункт меню есть, но редактировать ноду нельзя.
<?php
function prostor_menu_alter(&$items) {
$items['node/35/edit']['title'] = 'My node edit';
$items['node/35/edit']['menu_name']='Navigation';
$items['node/35/edit']['access callback'] = 'user_access';
?>
Есть идеи?
Все правильно, для изменения меню нужно использовать hook_menu_alter()
в Вашем случае нужно переопределять 'access callback' и 'access arguments'. И здесь мало использовать user_access. Система доступа к нодам достаточно сложна, учитывая, что ноды можно создавать из интерфейса и давать разный доступ к ним.
Если Вам ДЕЙСТВИТЕЛЬНО нужены права доступа, отличные от системных. Если нет, то доступ лучше не переопределять.
Тут еще не совсем понятно, что именно требуется. Либо переопределить меню, либо просто дублировать.
Если просто дублировать, то заходите в node_menu() и копируете нужные строки в ваш модуль, причем путь нужно выдумать новый.
Можно свой путь добавить:
mymodule.module
<?php
$items['mymodule/%node/edit'] = array(
'title' => 'Edit',
'page callback' => 'node_page_edit',
'page arguments' => array(1),
'access callback' => 'node_access',
'access arguments' => array('update', 1),
'weight' => 1,
'file' => 'node.pages.inc',
'file path' => drupal_get_path('module', 'node'),
'type' => MENU_NORMAL_ITEM,
);?>
Если использовать hook_menu_alter - тоже самое, только $items['node/%node/edit']