Drupal 8. Шаг за шагом как создать модуль с отображением в admin панели

Опубликовано admin - сб, 09/28/2019 - 22:12

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

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

Форма в администраторском разделе строится с помощью массива данных.

В результате прочтения Вы будете уметь отображать модуль в администраторском разделе с ссылкой в админ меню.

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

Шаг 1. Создание формы модуля

  • Создать директорию в /modules 
  • Создать директорию  welcome  внутри директории   modules  

Шаг 2. Создание YAML info файла

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

Наш файл должен иметь расширение  .info.yml и в нашем случае называться  welcome.info.yml.

Создайте файл welcome.info.yml в корне директории welcome  со следующим содержанием:

name: Welcome  
type: module  
description: Display a message when a user logs in  
core: 8.x  
package: Custom  

После установки Вам необходимо включить его.

2.1. Дальнейшая установка

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

  • Создайте файл welcome.routing.yml.
  • Создайте файл welcome.links.menu.yml.
  • Создайте файл welcome.module
  • Создайте директорию src.
  • В директории src , созлайте новую директорию с названием Form.
  • В директорию Form , создайте файл MessagesForm.php.

У Вас должа получится следующая структура

модуль админ Drupal 8

 

Шаг № 3 Создание формы

В результате у нас будет форма в администраторском разделе с доступом по определенному url.

В файле MessagesForm.php укажите:

<?php  
/**  
 * @file  
 * Contains Drupal\welcome\Form\MessagesForm.  
 */  
namespace Drupal\welcome\Form;  
use Drupal\Core\Form\ConfigFormBase;  
use Drupal\Core\Form\FormStateInterface;  

class MessagesForm extends ConfigFormBase {  

}  

Класс ConfigFormBase основан на системном классе представляющем формы.

Унаследованные методы данного  класса:

  • getEditableConfigNames() - получает название настроек 
  • getFormId() - возвращает уникальное id формы
  • buildForm() - возвращает массив формы
  • validateForm() - функция валидации формы
  • submitForm() - обработка отправки формы

Начнем с getEditableConfigNames() и getFormId():

<?php  

/**  
 * @file  
 * Contains Drupal\welcome\Form\MessagesForm.  
 */  

namespace Drupal\welcome\Form;  

use Drupal\Core\Form\ConfigFormBase;  
use Drupal\Core\Form\FormStateInterface;  

class MessagesForm extends ConfigFormBase {  
  /**  
   * {@inheritdoc}  
   */  
  protected function getEditableConfigNames() {  
    return [  
      'welcome.adminsettings',  
    ];  
  }  

  /**  
   * {@inheritdoc}  
   */  
  public function getFormId() {  
    return 'welcome_form';  
  }  
}  

buildForm() метод

 /**  
   * {@inheritdoc}  
   */  
  public function buildForm(array $form, FormStateInterface $form_state) {  
    $config = $this->config('welcome.adminsettings');  

    $form['welcome_message'] = [  
      '#type' => 'textarea',  
      '#title' => $this->t('Приветственное сообщение'),  
      '#description' => $this->t('Сообщение для пользователя который авторизовался'),  
      '#default_value' => $config->get('welcome_message'),  
    ];  

    return parent::buildForm($form, $form_state);  
  }  

Подробно остановимся на следующем:

$config = $this->config('welcome.adminsettings');  

Конфигурационная переменная  welcome.adminsettings is необходима для загрузи настроек по умолчанию.  

Единственным полем нашей формы  пока буде textarea.

Метод submitForm()

  /**  
   * {@inheritdoc}  
   */  
  public function submitForm(array &$form, FormStateInterface $form_state) {  
    parent::submitForm($form, $form_state);  

    $this->config('welcome.adminsettings')  
      ->set('welcome_message', $form_state->getValue('welcome_message'))  
      ->save();  
  }  

Метлд submitForm() срабатывакет в момент отправки формы:

   $this->config('welcome.adminsettings')  
      ->set('welcome_message', $form_state->getValue('welcome_message'))  
      ->save();  

В данном методе сохранятся переменная  welcome_message.

Шаг 4. Step 3: Access the form

Маршрут (route).

welcome.admin_settings_form:  
  path: '/admin/config/welcome/adminsettings'  
  defaults:  
    _form: '\Drupal\welcome\Form\MessagesForm'  
    _title: 'MessagesForm'  
  requirements:  
    _permission: 'access administration pages'  
  options:  
    _admin_route: TRUE  

Данный маршрут обрабатывается контроллером класса (\Drupal\welcome\Form\MessagesForm). Когла Вы откроете /admin/config/welcome/adminsettings вы получите доступ к форме, созданной нами выше. 

форма

 

Если сохранить данные и обновить страниц (/admin/config/welcome/adminsettings ) вы увидите  сохраненный текст.

Давайте перейдем по даресу /admin/config/welcome/adminsettings.

Создание пункта меню в администраторском разделе

Для этого нам понадобится файл welcome.links.menu.yml со следующим содержанием:

welcome.admin_settings_form:  
  title: 'Welcome message configuration'  
  route_name: welcome.admin_settings_form  
  description: 'Welcome message admin'  
  parent: system.admin_config_system  
  weight: 99  

Подробные объяснения:

  • Title: Заголовок пункта меню. 
  • route_name: имя маршрут.
  • Description: описание маршрута
  • Parent: родительский пункт меню
  • Weight: вес пункта меню

 

После очистки кэща по адресу admin/config бужет доступна наша ссылка на настройки модуля.

Шаг № 5. Основная функция модуля.

В файле welcome.module, создаём функцию хук welcome_user_login():

<?php
/**
 * @file
 * Contains welcome.module.
 */

function welcome_user_login($account) {  
  $config = \Drupal::config('welcome.adminsettings');  
  drupal_set_message($config->get('welcome_message'));  
}  

welcome_user_login  - хук срабатываемый во время авторизации пользователя, в котором будут выводится приветственное сообщение.

Сейчас Вы сможете наблюдать приветственное сообщение. Для этого очистите кэш.

Также необходимо установить данный модуль.

Шаг за шагом как создать модуль с отображением в admin панели

Взаимосвязанные материалы

# 1. О том как заменить стандартную иконку (Throbber) в Drupal 8 (понедельник, ноября 9, 2020 - 23:23 ),

Для замены стандартной иконки загрузки (Throbber) в Drupal 8 необходимо добавить следующий js код:

читать...
# 2. SetHandler none Drupal_Security...... (вторник, октября 6, 2020 - 23:26 ),
Долго пришлось искать проблему не отображения файлов для которых созданы стили в Drupal 8. читать...
# 3. Temporary file '*****.tmp' could not be created (суббота, сентября 26, 2020 - 19:37 ),

Если в последних версиях Drupal 8 появилась ошибка "Temporary file '*****.tmp' could not be created"

необходимо добавить в  файл \sites\default\settings.php  строку

читать...
# 4. Как правильно кэшировать хлебные крошки в Drupal 8 (среда, января 29, 2020 - 14:12 ),

Несколько раз сталкивался с тем что последний элемент Breadcrumb кэшировался на страницах с типом "node", несмотря на то, что страница менялась. То же самое наблюдалось и с view. читать...

# 5. Drupal 8. Несколько способов вывода информации черех Ajax (понедельник, января 27, 2020 - 23:23 ),
О том, как осуществить вывод информации с использованием ajax в Drupal 8. В Drupal 8 имеется несколько методов вывода информации через ajax - c применением методов Api и с использованием стандартных функций jQuery. При этом jQuery в Drupal 8 установлена по умолчанию. читать...
На разработку сайта! Скидки до 20%!