2010-09-20 4 views
0

Я создаю небольшую систему бронирования. вы можете создавать узлы типа, которые можно резервировать, например, проектор. У меня есть календарь с обычными дисплеями. Я добавляю аргумент для ссылки на узел, но у меня возникают проблемы с определением обратного вызова страницы. Может кто-нибудь помочь мне?Drupal: Создать пункт меню для просмотра

Теперь я хочу, чтобы создать пункты меню для различных узлов

function your_module_menu() { 
$nodeid //semantic, node is loaded right 
    $items['reservate/nodeid/$year-w$week'] = array(// semantic, url is built right 
     'title' => t('Your Module Name'), 
     'description' => t('Menu's description.'), 
     'page callback' => 'page_callback_funtion', 
     'page arguments' => array('page callback arguments'), 
     'access callback' => 'your_module_access',   // the function that validates access based on the user's role(s). 
     'access arguments' => array(array(role1', 'role2')), // list of roles authorized - note nested array. 
     'type' => MENU_NORMAL_ITEM, 
    ); 
    return $items; 
} 

@edit

нормально, может быть, я не объясняющих хорошо :). У меня есть тип контента: единица, которую можно зарезервировать. для каждого создаваемого элемента я хочу сгенерировать элемент меню (я могу выполнить перестроение меню при сохранении или обновлении узла). меню должно быть связано с представлением, с идентификатором узла (unit) в качестве аргумента в URL-адресе.

ответ

0

Я нашел очень простой способ сделать это, я просто создал представление-блок, который создает ссылку с некоторыми фильтрами.

простой и именно то, что мне нужно было, похоже, не может понять, почему я не думал о том, что рано

1

Я не уверен, что именно вы пытаетесь сделать, но если ваша цель - создать пункт меню, а не новую страницу, которую вы определяете в своем настраиваемом модуле, вы должны использовать систему меню в Drupal. Вы можете создавать пункты меню, указывающие на любой URL-адрес, который существует на вашем сайте.
Для узлов это особенно просто, поскольку вы можете сделать это непосредственно в форме редактирования/создания узла.

Drupal кэширует меню, поэтому вы не можете создавать элементы меню с динамическими частями в них, например, идентификатор пользователей и т. Д. Если вы хотите сделать что-то подобное, вы должны создать общий обратный вызов, который либо перенаправляет пользователя на динамический URL-адрес или отображаемый контент на основе пользователя.

Update

Вместо того, чтобы восстановить в систему меню каждый раз, когда узел создается или удален, который не будет очень масштабируемым, вы могли бы вместо того, чтобы просто создать новый пункт меню, с hook_nodeapi и удалите его, когда он будет удален.

  • Чтобы создать его, вы можете использовать menu_link_save
  • Чтобы удалить его, вы можете использовать menu_link_delete
+0

хорошо, может быть, я не очень хорошо объяснил :). У меня есть тип контента: единица, которую можно зарезервировать. для каждого создаваемого элемента я хочу сгенерировать элемент меню (я могу выполнить перестроение меню при сохранении или обновлении узла). меню должно быть связано с представлением, с идентификатором узла (unit) в качестве аргумента в URL-адресе. – Nealv

1

Если я правильно понимаю, вы пытаетесь автоматически создать пункт меню каждый раз, когда новое содержание узел типа «единица». Если это правильно, я бы предложил использовать модульные правила и крошечный фрагмент PHP для создания пользовательского элемента меню, созданного в различных системных событиях, таких как создание контента. Вы можете найти учебник, который я написал об этой теме полезной:

http://jan.tomka.name/blog/programmatically-creating-menu-items-drupal

Идея проста: создать правило в модуле правил для действия обжигают при создании узла или удаления и использовать Drupal API-вызовы, о которых упомянул googletorp, чтобы фактически манипулировать элементами меню.