Вопрос по hook_menu
Прислано: Nomad-71
сб, 30/01/2010 - 16:12
Пытаюсь написать простенький модуль для Друпала (вооружился книгой Pro Drupal Development John за авторством K.VanDyk and Matt Westagate), соответсвенно в самом начале есть небольшой пример создания меню который выглядит вот так:
<?phpfunction annotate_menu($may_cache) {
$items = array();
if ($may_cache) {
$items[] = array(
'path' => 'admin/settings/annotate',
'title' => t('Annotation settings'),
'description' => t('Change how annotations behave.'),
'callback' => 'drupal_get_form',
'callback arguments' => array('annotate_admin_settings'),
'access' => user_access('administer site configuration')
);
}
return $items;
}?>И сказано, что должна появится ссылка, "annotate", но её нет, собственно вопрос почему? Чего я упустил?
- Nomad-71's blog
- Для комментирования войдите или зарегистрируйтесь
Может, вы не сбросили кеш? Поставьте devel. Он это умеет просто и быстро делать.
- Для комментирования войдите или зарегистрируйтесь
Гыгыгыгы, а hook_menu() то, пятёрошный...
А пропустили вы поиск, он справа сверху, тема кривых исходников Вандюка обсуждалась раз пицот, даже выкладывались правильные версии модулей
- Для комментирования войдите или зарегистрируйтесь
Гыгыгыгы, а hook_menu() то, пятёрошный...
А пропустили вы поиск, он справа сверху, тема кривых исходников Вандюка обсуждалась раз пицот, даже выкладывались правильные версии модулей
К сожалению пропустил, да и сейчас что-то не нашел. Зато вооружился документацией (http://api.drupal.org/api/function/hook_menu/6)
И всё равно как-то не наблюдаю меню.
- Для комментирования войдите или зарегистрируйтесь
Ну, сорри, среди друпал-кодеров критически низок процент экстрасенсов, без исходника мало кто может чего сказать
- Для комментирования войдите или зарегистрируйтесь
Ну, сорри, среди друпал-кодеров критически низок процент экстрасенсов, без исходника мало кто может чего сказать
Хмм, это я знаю. Именно поэтому линк дал, ну давайте попробуем так:
2 файла:
test.info
; $Id$
name = test
description = description
package = Example
core = 6.xи второй:
test.module
<?php
function hook_menu() {
$items = array();
$items['blog'] = array(
'title' => 'blogs',
'description' => 'Listing of blogs.',
'page callback' => 'blog_page',
'access arguments' => array('access content'),
'type' => MENU_SUGGESTED_ITEM,
);
$items['blog/feed'] = array(
'title' => 'RSS feed',
'page callback' => 'blog_feed',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}?>Если я всё правильно понял, то в результате таки должна получится менюшка (пусть ни фига не делающая - это чуть позже). Если не правильно понял, то порекомендуйте чего почитать - на гордый статус веб программиста не претендую (и не собираюсь, просто, так случилось, нужно написать небольшой модуль).
- Для комментирования войдите или зарегистрируйтесь
1. сброс кэша
2. должна появиться не менюшка, а два пункта один пункт в меню. ищите в навигации
3. функции 'blog_page' и 'blog_feed' определены?
- Для комментирования войдите или зарегистрируйтесь
2. должна появиться не менюшка, а два пункта в меню. ищите в навигации
Во втором у него MENU_CALLBACK - в меню навигации не появится
- Для комментирования войдите или зарегистрируйтесь
Да, ошибся, сорри.
- Для комментирования войдите или зарегистрируйтесь
3. функции 'blog_page' и 'blog_feed' определены?
Даже если функция не определена, то просто будет 404, но пункт работать будет
- Для комментирования войдите или зарегистрируйтесь
1. сброс кэша
2. должна появиться не менюшка, а два пункта один пункт в меню. ищите в навигации
3. функции 'blog_page' и 'blog_feed' определены?
1. Если про кеширование Drupal - то оно вообще сейчас в настройках отключено.
2. Нету
3. Нет не определены.
- Для комментирования войдите или зарегистрируйтесь
1. Если про кеширование Drupal - то оно вообще сейчас в настройках отключено.
Вы хорошо читали про hook_menu()? Кеш нужно сбросить, чтобы меню перестроилось
- Для комментирования войдите или зарегистрируйтесь
Вы хорошо читали про hook_menu()? Кеш нужно сбросить, чтобы меню перестроилось
Да, и такое бывало.. admin/settings/performance -> "сбросить кеш данных", тем не менее admin/build/menu-customize/navigation ничего нового.
- Для комментирования войдите или зарегистрируйтесь
Этот пункт сбрасывает только кэш страниц.
Почистите таблицу cache_menu или поставьте
Devel. Он позволяет чистить эту таблицу через Drupal. И вообще, он действительно полезен при разработке.
- Для комментирования войдите или зарегистрируйтесь
Отлично мы тут все вместе тупим. Хук должен называться test_menu, а не hook_menu.
- Для комментирования войдите или зарегистрируйтесь
Отлично мы тут все вместе тупим. Хук должен называться test_menu, а не hook_menu.
ОМГ. Точно...
- Для комментирования войдите или зарегистрируйтесь
Ну, изначально-то функция называлась правильно.
И всё равно кеш придётся сбросить ;)
- Для комментирования войдите или зарегистрируйтесь
И всё равно кеш придётся сбросить ;)
Да, или переставить модуль.
- Для комментирования войдите или зарегистрируйтесь
Этот пункт сбрасывает только кэш страниц.
Почистите таблицу cache_menu или поставьте
Devel. Он позволяет чистить эту таблицу через Drupal. И вообще, он действительно полезен при разработке.
Почистил - без толку.
- Для комментирования войдите или зарегистрируйтесь
Тогда выкладывайте код модуля
- Для комментирования войдите или зарегистрируйтесь
Тогда выкладывайте код модуля
Так уже выложил, всё что есть.
- Для комментирования войдите или зарегистрируйтесь
Вы пока только выложили код от пятёрки и то, что написано на api.drupal.ru
- Для комментирования войдите или зарегистрируйтесь
А больше ничего и нету - куда писать дальше, если изначально не работает?
- Для комментирования войдите или зарегистрируйтесь
Прикрепите два файла, info и module.
- Для комментирования войдите или зарегистрируйтесь
Вот, пожалуйста.
- Для комментирования войдите или зарегистрируйтесь
Прошу всё-таки уважать отвечающих и ознакомиться с хуковой структурой друпала
Отлично мы тут все вместе тупим. Хук должен называться test_menu, а не hook_menu.
У вас модуль называется columns, следовательно, хук будет columns_menu()
Так же необходимо поправить info-файл
- Для комментирования войдите или зарегистрируйтесь
Спасибо.
- Для комментирования войдите или зарегистрируйтесь


Комментарии