Прошу не пинать ногами, drupal только начал осваивать
Решил взяться сразу за написание модуля, т.к. был нужен готовый каркас интранет-сайта для работы с базой данных.
Первая же проблема, с которой столкнулся - не появляются в основном меню пункты, добавленные мною в hook_menu.
Модуль включен, играл с весом...результат плачевный. Начал возиться с меню потому, что есть мною написанное приложение
на Delphi, которое хотел бы переложить на web-технологию. Опыт работы с базой данных/php/html есть, поэтому решил
разобраться со спецификой drupal-а...
* Display menu for module magmain
*
*/
function magmain_menu(){
$items = array();
$items['magmain'] = array(
'title' => 'Shops',
'description' => 'Магазины Magmain',
'page_callback' => 'magmain',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
$items['magmain/zayav'] = array(
'title' => 'Zayavka',
'description' => 'Заявки Magmain',
'page_callback' => 'zayav',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
} // function magmain_menu
Понимаю, что где-то ошибка, но не знаю, как посмотреть отладочную информацию.
Drupal брал в архиве с этого сайта. ОС Debian lenny.
Возможно что-то наплужил с правами, хотя установка прошла без проблем.
В таблице MySQL пункты меню есть, но почему-то были с атрибутом hide=-1
Может кто направит на путь истинный?
Комментарии
1-e http://drupal.org/project/devel - для дебага
2-е кирилица в коде - зло (это мое мнение).
3-е 'page_callback' => 'magmain' есть в модуле функция с именем magmain ? которая пусть даже и не делает ничего?
4-е меню кешируется поэтому чистить кеш обязательно после каждого изменения в пунктах меню.
Спасибо, попробую
Согласен, я начинал без нее до того, как запостить сообщение.
был вот такой вариант:
return t('Hello!');
}
function magmain_menu() {
$items['magmain']=array(
'page callback' => 'magmain_hello',
'type' => MENU_NORMAL_ITEM,
'title' => 'MagMain',
'weight' => 10,
);
return $items;
} // magmain_menu()
Кэш браузера? А как-нибудь очистить, не затрагивая весь кэш...только связанное с друпалом...возможно?
А как это пользователям объяснять, если вносить изменения в структуру время от времени? Я их одним словом кэш убью
Неужели это необходимое условие при каждом изменении в модуле? Зависит ли это от типа браузера?
Я пробовал отключение/установку модуля, полагая, что при этом должны выполняться все необходимые операции.
Посмотрел API...
«Versions
4.6 – 5
hook_menu($may_cache)
6 – 7
hook_menu()
»
У меня друпал 6.06. В предыдущих версиях можно было указать, кэшировать меню или нет...если я правильно понял?
По умолчанию меню в друпале как и вьюсы кешируются всегда не зависимо от того хотите вы этого или нет.
Кеш друпала надо чистить а не кеш браузера. В модуле девел для этого есть специательная кнопочка которая так и называется. или эту функцию можно вызвать из настроек производительности, а еще проще зайти в БД и очистить таблицу cache_menu
Понял, спасибо. Таблицу в базе очистил (мне такой способ ближе )Результата пока нет...
Модуль devel сейчас ставлю и буду разбираться
Залез в Производительность...Режим кэширования: Отключено
А так?
<?php
function magmain_menu(){
$items = array();
$items['magmain'] = array(
'title' => 'Shops',
'description' => 'Магазины Magmain',
'page callback' => 'magmain',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
$items['magmain/zayav'] = array(
'title' => 'Zayavka',
'description' => 'Заявки Magmain',
'page callback' => 'zayav',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
} // function magmain_menu
?>
glu2006, огромное СПАСИБО!!! Появился в меню раздел Shops
Уже полдела Теперь нет подменю Zayavka...
Странно, что в первом куске кода "page_callback", а во втором "page callback"
И второй вариант тоже не работал. Глянул в описание API hook_menu:
menu_name и MENU_NORMAL_ITEM
и в тоже время page callback
Как-то в разнобой
Брал примеры из разных книжек...А они сканированные...Разницу не углядел
Обращайте внимание для какой ветки друпала тот или иной пример, поскольку организация меню в 5-ке и 6-ке сильно отличаются.
glu2006, читал про проблемы совместимости версий drupal-а...это немного пугает, т.к.
привык работать по принципу сделал хорошо один раз и забыл
В виндовом приложении у меня древовидное меню формируется из базы данных. Для того, чтобы реализовать что-то похожее в друпале
нужно видимо писать свой блок с php-кодом? Или есть что-то подобное... может есть примеры реализации, ссылки? Смотрел каталог расширений для
drupal...закопаться можно, а описание новичку не всегда дает представление о функционале и возможностях.
посмотрел в выходные на домашнем компе исходник модуля. В нем "page callback" без знака подчеркивания.
После очистки кэша drupal все заработало (причем с иерархическим меню).
Вывод: очистка кэша была ключевым моментом для решения проблемы.
Еще раз спасибо, glu2006
А вот такой вопрос есть (druapl 7): в main-menu есть пункт "Вход/регистрация" после авторизации пользователя она должна исчезнуть, а вместо нее появиться "мой аккаунт". Беда вот в чем - она не меняется! пока не очистишь cache. код хука приблизительно такой
<?php
function user_welcome_menu()
{
global $user;
if (isset($user->uid))
{
$items["user/$user->uid"] = array(
'title' => t('Мой аккаунт'),
'access arguments' => array('access content'),
'menu_name' => 'navigation',
'type' => MENU_NORMAL_ITEM,
);
}
else
{
$items['user/register'] = array(
'title' => t('Вход/Регистрация'),
'access arguments' => array('access content'),
'menu_name' => 'navigation',
'type' => MENU_NORMAL_ITEM,
);
}
menu_cache_clear('main-menu');
return $items;
}
?>
Срочно читать про систему меню в друпале, откуда вы придумали что хук_меню выполняется при каждой загрузке страницы?
а как это реализовать можно не подскажите? на drupal.org реализовано что-похожее. может очищать принудительно кэш данного меню?