Как создать форму для настройки модуля? ссылка есть. а формы нет

Главные вкладки

Аватар пользователя Tomcat Tomcat 15 мая 2008 в 17:33

Сделал в модуле хук forms
в нем написал такое:

$items['admin/settings/spiral_inptrack'] = array(
        'title' => 'Input tracking',
    'page callback' => 'spiral_inptrak_admin',
    'description' => 'Configuring form.',
    'access arguments' => array('administer inptrak')
    );

Создал функцию admin:

function spiral_inptrack_admin() {

   $form['spiral_inptrack'] = array(
    '#type' => 'textfield',
    '#title' => t('test field'),
    '#default_value' => variable_get('test', test),
    '#size' => 10,
    '#maxlength' => 10,
    '#description' => t("test field"),
    '#required' => TRUE,
  );

  return system_settings_form($form);

}

Вроде бы как должно что-то вывести, а выводит пустую страницу
Права проверял, URL вроде как сходится тоже admin/settings/spiral_inptrack
что бы такое вывести чтоб хотя бы понять, у меня admin обрабатывается или нет?
И что я делаю не так?

Комментарии

Аватар пользователя penexe penexe 15 мая 2008 в 17:44

хз как в шестерке но в 5ке вот так

<?php
$items
[] = array('path' => 'admin/settings/article''title' => t('Настройки статей'),
      
'callback' => 'drupal_get_form''callback arguments' => array('article_admin_settings')
      );
?>
<?php
function article_admin_settings() {
  
// User e-mail settings.
  
$form['email'] = array('#type' => 'fieldset''#title' => t('Почтовые уведомления'));
  
$form['email']['article_mail_subject'] = array(
      
'#type' => 'textfield'
      
'#title' => t('Тема письма'), 
      
'#default_value' => _article_mail_text('subject'), 
      
'#maxlength' => 180
    );
  
$form['email']['article_mail_body'] = array(
      
'#type' => 'textarea'
      
'#title' => t('Тело письма'), 
      
'#default_value' => _article_mail_text('body'), 
      
'#rows' => 15,
      );
  return 
system_settings_form($form);
}
?>
Аватар пользователя PanDa777 PanDa777 15 мая 2008 в 21:28

Посмотрим, что делает пункт меню 'spiral_inptrack'. Он просто вызывает функцию spiral_inptrack_admin. Она ему возвращает то, что вернула system_settings_form. А она в свою очередь лишь возвращает форму, которая, для её обработки, должна быть передана функции drupal_get_form. Значит, вместо
<?php
'page callback' => 'spiral_inptrak_admin',
?>

надо написать

<?php
'page callback' => 'drupal_get_form',
'page arguments' => array('spiral_inptrak_admin'),
?>

Нечто подобное можно увидеть, например, в файле modules/dblog/dblog.module, строки 51-59

Ужасно объяснил, правда Smile

Аватар пользователя Crazy Joker Crazy Joker 16 мая 2008 в 1:50

Попробую объяснить поконкретней на своем примере для 6 версии друпала:

function shop_menu() {
  $items = array();

  $items['admin/settings/shop'] = array(
    'title' => 'Shop Database', // то, что отображается в меню
    'description' => 'Shop module settings.', // это для атрибута title, т.е. это, hint, появляющийся при наведении мыши
    'page callback' => 'drupal_get_form', // в качестве callback'а  вызывается форма
    'page arguments' => array('shop_admin_settings'), // функция, описывающая форму и передаваемая в callback
    'access arguments' => array('administer site configuration'), // права доступа
    'type' => MENU_NORMAL_ITEM, // тип элемента меню
    'file' => 'shop.admin.inc', // необходимо, если описание функции находится в другом файле
  );

...

}

Аватар пользователя Tomcat Tomcat 16 мая 2008 в 10:59

Супер! заработало! Большое спасибо всем , кто ответил!
А вот вопрос: свойство 'file' => 'shop.admin.inc', что это за файл? Обычный php? Можно ли назвать его shop.admin.php например? И если я хочу нарисовать форму не средствами друпала. а обычную форму на HTML и JS, то я могу, по идее. прямо там писать форму свою, а потом в конце сделть ей return и в хуке form написать page callback = "имя функции которая возвращает форму со всеми яваскриптовыми делами" ?