Как быстро создать форму для общесистемных настроек в Drupal 7

Обычно для того, чтобы создать форму настройки мне нужно всего 1 хук - hook_menu, он нужен в этой задаче, чтобы сказать друпалу, что по такому-то пути должна открыться страница, на которой будет форма задания настроек.

Пример такого хука:

function MYMODULE_menu() {
  $menu['admin/config/system/MYMODULE_SETTINGS'] = array(
    'title' => t('Setting form'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('MYMODULE_settings_form'),
    'access arguments' => array('administer site configuration'),
    'file' => 'MYMODULE.admin.inc',
  );
  return $menu;
}

В строке 'file' => 'MYMODULE.admin.inc',я указал, что при обращении к странице admin/config/system/MYMODULE_SETTINGS сначала должен быть подключен файл MYMODULE.admin.inc, лежащий в папке моего модуля.
Вот его содержимое:

/**
 * @file MYMODULE.admin.inc
 */

function MYMODULE_settings_form($form, $form_state) {
  $form['MYMODULE_settings_item'] = array(
    '#type' => 'checkboxes',
    '#title' => 'Заголовок чекбоксов',
    '#description' => 'Описание чекбоксов',
    '#options' => array('1' => '1', '2' => '2'),
    '#default_value' => variable_get('MYMODULE_settings_item', array()),
  );
  return system_settings_form($form);
}

Код формы вынесен в файл с названием MYMODULE.admin.inc. Соглашение просит выносить административные функции ваших модулей в отдельные файлы. Так с ними легче разобраться.

system_settings_form($form); - это важная строка в функции определении формы, которая говорит Drupal'у, что все элементы формы должны будут стать variable'ами (переменными друпала, которые записываются в таблицу variables). Вы сможете пользоваться этими переменными Drupal-way при помощи функции variable_get.

Вот так легко и просто получить форму для настроек.

http://drupal.org/node/1111260

Тэги:

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.