Добавить пункт в меню через hook_menu типа node/%/edit

Главные вкладки

Аватар пользователя player player 28 ноября 2009 в 12:39

Хочу вывести свой пункт меню в навигации, который будет вести на страницу изменения ноды типа 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;
}
?>

Комментарии

Аватар пользователя player player 28 ноября 2009 в 13:13

Допустим так. Пункт меню есть, но редактировать ноду нельзя.

<?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';
?>
Аватар пользователя seaji seaji 29 ноября 2009 в 0:28

Все правильно, для изменения меню нужно использовать hook_menu_alter()
в Вашем случае нужно переопределять 'access callback' и 'access arguments'. И здесь мало использовать user_access. Система доступа к нодам достаточно сложна, учитывая, что ноды можно создавать из интерфейса и давать разный доступ к ним.
Если Вам ДЕЙСТВИТЕЛЬНО нужены права доступа, отличные от системных. Если нет, то доступ лучше не переопределять.

Аватар пользователя seaji seaji 29 ноября 2009 в 0:32

Тут еще не совсем понятно, что именно требуется. Либо переопределить меню, либо просто дублировать.
Если просто дублировать, то заходите в node_menu() и копируете нужные строки в ваш модуль, причем путь нужно выдумать новый.

Аватар пользователя Обухов Никита Обухов Никита 29 ноября 2009 в 11:08

Можно свой путь добавить:

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']