Как должна выглядеть болванка модуля
Прислано: pihel
пт, 23/11/2007 - 13:27
Пытаюсь создать самый простой модуль, который бы возвращал пару строк, устанавливаю модуль, но никак не могу увидеть результат работы:
Назвал модуль Form, пытаюсь зайти на модуль по ссылке: /?q=form
сейчас модуль выглядит примерно так:
<?php function form_menu($may_cache) { global $user; $items = array(); if ($may_cache) { $items[] = array( 'path' => 'form', 'title' => t('Тест формы'), 'type' => MENU_CALLBACK, 'callback' => 'form_page'); } return $items; } function test_form() { $form['name'] = array( '#type' => 'textfield', '#title' => t('Name'), '#size' => 30, '#maxlength' => 64, '#description' => t('test test'), ); return $form; } function form_page() { return drupal_get_form('test_form'); } ?>
Собсно:
1. если я пытаюсь зайти не по той ссылке, то как увидеть результат работы этого модуля ?
2 если я чтото не так пишу, то как правильно должен выглядеть необходиый минимум для создания модуля?
Взаранее спасибо :)
- pihel's blog
- Для комментирования войдите или зарегистрируйтесь
вы его включили?:))
- Для комментирования войдите или зарегистрируйтесь
Иногда для того чтоб Друпал учел новый пункт меню нужно зайти в раздел Меню в админ части, и выйти, до этого момента может быть page not found, даже если написано все правильно.
PS: имя вашего модуля может быть не правильно воспринято, хотя и не утверждаю, назовите testform к примеру.
- Для комментирования войдите или зарегистрируйтесь
1) Как уже написали, после создания новых кэшируемых обработчиков в хуке menu надо зайти в админку в меню.
2) Еще в $items[] надо добавить access. По умолчанию хз будет ли доступ.
А вообще какая ошибка выдается? 404 или 403?
- Для комментирования войдите или зарегистрируйтесь
По совету переименовал в testform,
<?php function testform_menu($may_cache) { global $user; $items = array(); //if ($may_cache) { $items[] = array( 'path' => 'form', 'title' => t('Тест формы'), 'access' => user_access('access content'), 'type' => MENU_CALLBACK, 'callback' => 'testform_page'); //} return $items; } function test_form() { $form['name'] = array( '#type' => 'textfield', '#title' => t('Name'), '#size' => 30, '#maxlength' => 64, '#description' => t('test test'), ); $form['submit'] = array('#type' => 'submit', '#value' => t('Save')); return $form; } function testform_page() { return drupal_get_form('test_form'); } ?>
Ну вот установил я модуль
зашел в меню в админке
всеравно при заходе на ?q=testform выдает "страница не найдена"
Может всеже чтото не хватает в модуле? и еще что значит переменная $may_cache ?
- Для комментирования войдите или зарегистрируйтесь
404 - страница не найдена...
- Для комментирования войдите или зарегистрируйтесь
Это рабочий модуль, у меня работает. В админке на странице модулей включили модуль-то??
Про maycache: Те пункты меню, которые будете возвращать при $may_cache==true будут кэшироваться Дрюпалем.
<?php
if ($maycache) {
кэшируемые пункты меню
} else {
не кэшируемые пункты меню, которые будут обновляться при каждой загрузке страницы
}
?>- Для комментирования войдите или зарегистрируйтесь
Всем огромное спасибо!!!!!!!!!!!!!!!
Оно заработало :)))
Окончательный вариант:
function testform_menu($may_cache) { global $user; $items = array(); if ($may_cache) { $items[] = array( 'path' => 'testform', 'title' => t('Тест формы'), 'access' => user_access('access content'), 'type' => MENU_NORMAL_ITEM, 'callback' => 'testform_page'); } return $items; }
Потом я зашел в пункт "меню" в админке, и все заработало
Всем спасибо за помощь!!!
- Для комментирования войдите или зарегистрируйтесь
под Drtupal 6.4 не получилось поднять всё равно... :(
Итог: Page not found. Что не так? Помогите, пожалуйста разобраться.
Что делал:
1. в sites/all/modules
создал папку testform
2. создал файл testform.info со следующим содержимым:
; $Id$
name = testForm
description = Test form module
core = 6.x
version = "0.1"
3. создал файл testform.module со следующим содержимым
<?php
function testform_menu($may_cache=true) {
global $user;
$items = array();
if ($may_cache) {
$items[] = array(
'path' => 'testform',
'title' => t('Тест формы'),
'access' => user_access('access content'),
'type' => MENU_NORMAL_ITEM,
'callback' => 'testform_page');
}
return $items;
}
function test_form() {
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#size' => 30,
'#maxlength' => 64,
'#description' => t('test test'),
);
$form['submit'] = array('#type' => 'submit', '#value' => t('Save'));
return $form;
}
function testform_page() {
return drupal_get_form('test_form');
}
?>4. Включил модуль на странице ?q=admin/build/modules
5. по рекомендации выше открыл страницу ?q=admin/build/menu
6. При открытии ?q=testform возвращает
Page not found
The requested page could not be found.
- Для комментирования войдите или зарегистрируйтесь
помогла замена
<?php
$items[] = array(
'path' => 'testform',
?>на
<?php
$items['testform'] = array(
//'path' => 'testform',
?>Теперь воюю с правами:
Access denied
You are not authorized to access this page.
- Для комментирования войдите или зарегистрируйтесь
john1123, примеры в топике даны для 5.х, в 6-ке поменялся формат этого массива $items и параметра $may_cache теперь нет. См. http://api.drupal.org/api/function/hook_menu/6
Строчку:
'access' => user_access('access content'),
надо заменить на:
'access arguments' => array('access content'),
- Для комментирования войдите или зарегистрируйтесь
Да, так. спасибо большое.
- Для комментирования войдите или зарегистрируйтесь





Комментарии