О чём речь: использование системы меню.
Описываемый hook: hook_menu.
Как упоминалось ранее, функция которую мы только что написали — это не hook: это название не опознаётся Друпалом. Мы должны сказать Друпалу как получить доступ к функции при выводе документа. Сделаем мы это при помощи hook_menu. Если вы помните, то мы уже использовали hook_menu в седьмой главе. hook_menu определяет связь между URL и функцией которая создаёт содержание для этого URL. Если нужно, то hook также делает проверку прав. Мы будем использовать уже сделанный нами ранее hook_menu.
<?php
function onthisdate_menu() {
$items = array();
//this was created earlier in tutorial 7.
$items['admin/settings/onthisdate'] = array(
'title' => 'On this date module settings',
'description' => 'Description of your On this date settings control',
'page callback' => 'drupal_get_form',
'page arguments' => array('onthisdate_admin'),
'access arguments' => array('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
//this is added for this current tutorial.
$items['onthisdate'] = array(
'title' => 'On this date',
'page callback' => 'onthisdate_all',
'access arguments' => 'access onthisdate content',
'type' => MENU_CALLBACK
);
return $items;
}
?>В сущности мы говорим следующее. Если пользователь идёт на URL http://example.com/onthisdate, то будет выведено содержание сгенерированное onthisdate_all, документ будет иметь название On this date, type — MENU_CALLBACK скажет Друпалу, что ссылку в меню показывать не надо и нужно только использовать эту функцию при запросе/получении URL. Если вы хотите, чтобы ссылка была создана в стандартном блоке навигации, то используйте MENU_NORMAL_ITEM.
Как было сказано ранее в седьмой главе, hook_menu может проверить права доступа до вывода документа. Запись access argument в массиве пункта меню — это то место, где делается проверка. Если вы добавите значение в свой массив прав в функции perm hook, вы можете использовать эту строку в качестве параметра в функции user_access и если пользователь не входит в роль для которой установлены права доступа к этому документу, то документ выведен не будет.
Если модуль не включен, то включите его как сказано в шестой главе. Если модуль уже включен, то сбросьте системные определения для этого модуля. Для этого нужно его выключить, а затем снова включить.
Теперь перейдите по адресу: /onthisdate (или /?q=onthisdate если у вас не включены Clean URLs) и вы увидите документ который мы всё это время делали.
Comments
Господа, если у кого возникают проблемы при использовании этого примера, обратите внимание, что указанный синтаксис устарел.
Например, вместо 'page callback' следует использовать 'callback' , а вместо 'access arguments' просто 'access'.
Как то не получается с меню разобраться по данному примеру
warning: Invalid argument supplied for foreach() in C:\....\drupal\includes\menu.inc on line 258.
можно ли данный пример полностью с готовыми файлами скачать, на ...org найти не смог, так вроде все понятно кроме назначения прав
Господа, если у кого возникают проблемы при использовании этого примера, обратите внимание, что указанный синтаксис устарел.Например, вместо 'page callback' следует использовать 'callback' , а вместо 'access arguments' просто 'access'.
тоже не помогло, мотрел в модуле голосования (Poll) в комлекте с drupal 6.1, так там callback и access по старому используються.
$items['admin/settings/onthisdate'] = тут у меня все отлично
$items['onthisdate'] = а вот это у меня не работает и permissions ничего по данному модулю нет.
А я сделал так:
//this is added for this current tutorial.$items['firstmodul'] = array(
'title' => 'Первый модуль',
'page callback' => 'firstmodul_all',
'access arguments' => array('access onthisdate content'),
'type' => MENU_CALLBACK
);
Изменилась только строчка
'access arguments' => array('access onthisdate content'),И в Drupal 6.5 всё заработало.
Нет, все дело в строчке:
$items['firstmodul'] = array(Название пункта меню не может совпадать с названием существующего установленного модуля, т.е. 'onthisdate' не катит, а 'onthisdatepage' да.
Post new comment