Home → Drupal →

Создание модуля Drupal 7

Опубликовано в пн, 01/26/2015 - 14:13

В этой статье рассмотрим основные этапы написания модуля на Drupal 7:

  • Создание модуля
  • Создание страницы модуля средствами API Drupal 7
  • Создание формы средствами API Drupal 7
  • Напишем простенький валидатор формы
  • Создадим инсталлятор модуля, который, при включении модуля будет создавать необходимые для работы таблицы в базе данных
  • Запись данных из формы в таблицу БД, созданную при установке модуля

Вот основные тезисы данной статьи. И так приступим.

Постановка задачи

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

Создание модуля

Создаем папку с нашим модулем по адресу sites/all/modules/test_module. В этой папке нам необходимо создать 3 файла: первый файл test_module.info - информация о нашем модуле, test_module.module - логика модуля, test_module.install - при включении модуля создает таблицу в БД.

в test_module.info пишем:

name = Test module // название модуля, которое будет отображаться пользователю в списке модулей.
description = Модуль для работы с БД // описание модуля, которое будет отображаться пользователю в списке модулей.
core = 7.x // версия ядра

Сохраняем, здесь нам больше указывать ничего не нужно.

Создание страницы модуля средствами API Drupal 7

Далее создадим страницу для модуля, на которой позже мы сделаем форму для сохранения значений в БД. Для этого в test_module.module воспользуемся хуком hook_menu:

<?php
function test_module_menu(){
    
$item = array(); // регистрируем пустой массив

    // ключ массива $item - адрес регистрируемой страницы /my_page
    // если в адресе указывать вложенность страницы, то ссылка на страницу отобразится в заданном разделе, 
    // например, если указать admin/config/my_page, то ссылка на нашу страницу появится в разделе Конфигурация сайта admin/config
    $item['my_page'] = array( 
        
'title' => 'Форма для связи с БД', 
        
'page callback' => 'test_module_callback',
        
'type' => MENU_NORMAL_ITEM,
        
'access callback' => TRUE
    
);

    return $item;
}
?>

Теперь в нашей функции обратного вызова test_module_callback, создадим форму со следующими полями: ФИО - тип текстовое поле, Пол - чекбокс с выбором пола. То есть простая форма, где указываем фио и пол.

Создание формы средствами API Drupal 7

в test_module.module, после функции test_module_menu(), пишем наш callback:

<?php
function test_module_callback(){

    $form = array(); // регистрируем пустой массив, в котором будут содержаться элементы нашей формы

    // создаем первый textfield для ФИО
    $form['name'] = array(
        
'#type' => 'textfield',
        
'#title' => 'Ваше имя',
        
'#attributes' => array(
            
'placeholder' => array('Имя Фамилия')
        ),
    );

    // создаем checkbox для Пола:
    
$form['sex'] = array(
        
'#type' => 'radios',
        
'#title' => 'Пол',
        
'#options' => array(
            
'0' => 'Male',
            
'1' => 'Female',
        ),
        
'#default_value' => '0',
    );

    // кнопка отправки формы
    
$form['submit'] = array(
        
'#type' => 'submit',
        
'#value' => 'Submit'
    
);

    // отрисовываем форму
    
return drupal_render($form);  
}
?>

На данном этапе у нас есть страница, созданная модулем, на которой есть текстовое поле, чекбокс с выбором пола и кнопка отправки. Хочу заметить, что модуль я еще не включал, так как включение я хочу осуществить после написания install файла.

Написание простенького валидатора формы

Так же в файле test_module.module мы можем написать валидатор, используя хук hook_validate, или описать свой сабмит формы используя хук hook_submit. Давайте напишем валидатор, который будет проверять длинну текстового поля, чтобы пользователь не мог ввести значение меньше трех символов, для этого после коллбека пишем:

<?php
function test_module_validate($form, &$form_state){ // принимает два аргумента, можете дебажить их, там есть много интересного

    $name = $form_state['values']['name']; // из $form_state вытягиваем значение текстового поля
    
$name_lenght = mb_strlen($name); // считаем количество символов
    // проверяем:
    
if($name_lenght < 3){ 
        
form_set_error('name', t('Short name'));
    }
}
?>

Сабмит мы опишем позднее, после написания инсталл файла модуля, так как в сабмите мы будем производить сохранение, в базу, введенных в форму значений.

Пишем "инсталлятор" модуля

Окрываем файл test_module.install, в нем используя хук hook_schema(), создадим для модуля, в БД, нужную таблицу, куда будем записывать ФИО и Пол.

<?php
function test_module_schema(){
    
$schema = array(); // регистрируем пустой массив

    // в качестве ключа пишем имя таблицы
    $schema['test_module'] = array(
        
'description' => 'Таблица результатов отправки формы',
        
'fields' => array( // описываем столбцы таблицы
            
'id' => array(
                
'type' => 'serial',
                
'unsignet' => TRUE,
                
'not null' => TRUE,
            ),
            
'name' => array(
                
'type' => 'varchar',
                
'length' => 128,
                
'default' => '',
            ),
            
'sex' => array(
                
'type' => 'int',
                
'default' => 0,
            ),
        ),
        
'primary key' => array('id'), // указываем primary key 
    
);

    return $schema;
}
?>

Теперь можно включить наш модуль, после чего в базе данных появится наша таблица 'test_module' со столбцами 'id', 'name', 'sex'.

Так же появится наша форма по адресу /my_page
stranica_modulya.jpg

Запись данных из формы в таблицу БД, созданную при установке модуля

Далее, возвращаемся test_module.module и пишем обработчик события submit. Что бы при отправке формы значения сохранялись в БД.

<?php
function test_module_submit($form, &$form_state){

    $q = db_insert('test_module'); // выбираем созданную нами таблицу в БД

    // с помощью метода fields заполняем таблицу введенными значениями
    $q->fields(
        array(
            
'name' => $form_state['values']['name'],
            
'sex' => $form_state['values']['sex'],
        )
    );
    
// сохраняем в переменную результаты запроса
    
$res = $q->execute();

    // делаем проверку 
    
if ($res) {
        
drupal_set_message('Форма успешно отправлена','status');
    }
    else {
        
drupal_set_message('Ошибка отправки формы','error');
    }

}
?>

Все. Теперь у нас есть полноценный модуль, который при включении создает таблицу в БД, в которую пишет результаты, введенные в форму, созданную модулем.

модуль
Drupal 7
hook_menu
форма
hook_validate
hook_submit
валидатор
hook_schema

Menu

  • Главная
  • О блоге

Category

Drupal
(15)
Php
(4)
Верстка
(2)
Разное
(2)
lakshtori.ru (Лакштори,luckshtory) - бренд мошенников
© by Conocube / Блогу - 3431 день