Как должна выглядеть болванка модуля

Прислано: 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 если я чтото не так пишу, то как правильно должен выглядеть необходиый минимум для создания модуля?

Взаранее спасибо :)

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано cwer в пт, 23/11/2007 - 15:59.

вы его включили?:))


Опубликовано karinka в пт, 23/11/2007 - 23:24.

Иногда для того чтоб Друпал учел новый пункт меню нужно зайти в раздел Меню в админ части, и выйти, до этого момента может быть page not found, даже если написано все правильно.

PS: имя вашего модуля может быть не правильно воспринято, хотя и не утверждаю, назовите testform к примеру.


Опубликовано edhel в сб, 24/11/2007 - 06:44.

1) Как уже написали, после создания новых кэшируемых обработчиков в хуке menu надо зайти в админку в меню.
2) Еще в $items[] надо добавить access. По умолчанию хз будет ли доступ.

А вообще какая ошибка выдается? 404 или 403?


Опубликовано pihel в сб, 24/11/2007 - 07:06.

По совету переименовал в 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 ?


Опубликовано pihel в сб, 24/11/2007 - 07:04.

404 - страница не найдена...


Опубликовано edhel в сб, 24/11/2007 - 07:14.

Это рабочий модуль, у меня работает. В админке на странице модулей включили модуль-то??

Про maycache: Те пункты меню, которые будете возвращать при $may_cache==true будут кэшироваться Дрюпалем.

<?php
if ($maycache) {
 
кэшируемые пункты меню
} else {
  
не кэшируемые пункты менюкоторые будут обновляться при каждой загрузке страницы
}
?>


Опубликовано pihel в сб, 24/11/2007 - 07:19.

Всем огромное спасибо!!!!!!!!!!!!!!!
Оно заработало :)))
Окончательный вариант:

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;
}

Потом я зашел в пункт "меню" в админке, и все заработало
Всем спасибо за помощь!!!


Опубликовано john1123 в сб, 30/08/2008 - 10:58.

под 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.


Опубликовано john1123 в сб, 30/08/2008 - 16:11.

помогла замена

<?php
      $items
[] = array(
        
'path' => 'testform',
?>

на

<?php
      $items
['testform'] = array(
        
//'path' => 'testform',
?>

Теперь воюю с правами:

Access denied
You are not authorized to access this page.


Опубликовано edhel в сб, 30/08/2008 - 18:59.

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'),


Опубликовано john1123 в ср, 03/09/2008 - 10:13.

Да, так. спасибо большое.


Новое на сайте

Ссылки партнёров