Делаем модуль сохраняющий настройки в базу

21.09.2017

Большинство модулей имеют свои настройки и страницу где эти настройки нужно вводить или править, поэтому предлагаю создать минимальный модуль для работы с настройками. На данный момент актуальная ветка Друпала 6.х и модуль будем делать именно для нее.

Наш модуль должен уметь:

  1. создавать переменную и заполнять ее значением по умолчанию;
  2. иметь страницу для изменения значения;
  3. иметь форму для изменения значения;
  4. и корректно удаляться, то есть удалить переменную после своего удаления.

Не стоит пугаться аж целых четырех пунктов, на самом деле большую часть работы за нас уже сделали разработчики, создание этого модуля и его тесты заняло 10 минут от силы, приступим (можно засечь время).
В папке с модулями создаем папку для нашего модуля и в ней делаем 3 файла:

  • \sites\all\modules\ minimal_settings – папка с модулями
  • minimal_settings.info — файл с информацией о модуле
  • minimal_settings.install — файл с функциями инсталляции и деинсталации модуля
  • minimal_settings.module — функции модуля

Самый первый файл это информационный minimal_settings.info, его содержимое
name = "Minimal Settings"
description = "This module shows how to maintain the minimum configuration."
core = "6.x"

Тут все понятно задали название модуля, описание и номер ветки Друпала для которого он предназначен.

Файл инсталляции minimal_settings.install
<?php
/**
* @file
* Install, uninstall functions for the stock module.
*/

/**
* Implementation of hook_install().
*/
function minimal_settings_install() {
variable_set('minimal_settings_value', 'Install');
}

/**
* Implementation of hook_uninstall().
*/
function minimal_settings_uninstall() {
variable_del('minimal_settings_value');
}
Тут всего 2 функции:

  • minimal_settings_install() – hook_install() создаем переменную и присваем ей значение по умолчанию.
  • minimal_settings_uninstall() — hook_uninstall() после удаления модуля, удаляем переменную из базы сайта.

Файл с самим модулей и функциями minimal_settings.module
<?php
/**
* Implementation of hook_menu().
*/
function minimal_settings_menu() {
$items = array();
$items['admin/settings/minimal'] = array(
'title' => 'Minimum configuration',
'page callback' => 'drupal_get_form',
'page arguments' => array('minimal_settings_form'),
'access arguments' => array('administer site configuration'),
);
return $items;
}

function minimal_settings_form() {
$form = array();
$form['minimal_settings_value'] = array(
'#type' => 'textfield',
'#title' => t('Minimal setting'),
'#description' => t('Current value: ') . variable_get('minimal_settings_value', ''),
);
return system_settings_form($form);
}
Опять всего 2 функции:
minimal_settings_menu() — hook_menu() определяем пункт где будут редактироваться наши настройки и по этому пути вызываем форму с настройками для всех пользователей с полномочиями 'administer site configuration'.
minimal_settings_form() — определяем форму и выводим ее на экран. Создаем одно поле для ввода и передаем форму в функцию system_settings_form(), эта функция добавит кнопки сохранения данных и сброса, а также обработает результат и сохранит в базу новые значения.

Что бы создать больше полей на форме можно почитать на сайте русского АПИ инструкции к Form API или например, статью 10 шагов к постижению форм в Друпале

Наш модуль называется "Minimal Settings" и я всегда говорю про настройки во множественном числе, но модуль сохраняет всего один параметр — предоставляю вам возможность устранить этот баг и заодно попрактиковаться.