Пишемо свій модуль для drupal 8

Реліз Drupal 8 відбувся і тепер, є сенс детальніше розглядати дану систему. Всі нововведення самого движка, ми природно тут не будемо розглядати, а перейдемо відразу до практики. Одним з важливих моментів для розробників, є написання кастомних модулів, бо жоден більш-менш складний проект не обходиться без написання своїх модулів.

Приступимо. Почнемо з файлової структури. Тепер, все кастомниє модулі повинні знаходитися по шляху:

Мій модуль буде називатися як - my_module. Створюємо папку з ім'ям my_module по шляху зазначеному вище. Сама назва файлів, так само зазнало змін.

Створимо файл в корені нашого модуля - my_module.info.yml. Як ви могли здогадатися, даний файл прийшов на зміну - my_module.info з 7 гілки, але він так само несе в собі лише описи для модуля. У моєму випадку - даний файл виглядає так:

Тут особливо розповідати нічого, з файлу зрозуміло, що за що відповідає. Після створення даного файлу, ми можемо побачити наш модуль на сторінці модулів:

Пишемо свій модуль для drupal 8

Який, ми природно активуємо.

Хочу зауважити, що тепер не можна відключити модуль. Є тільки два стани, встановити і видалити.

Природно, після активації модуля ми не побачимо нічого, крім галочки навпроти нашого модуля, яка позначає, що він встановлений. Тепер переходимо до створення сторінки. В Drupal 8 ми тепер не можемо визначити hook_menu і створити нову сторінку на сайті. На зміну йому прийшли роутинг (routing [маршрути]) в форматі yml.

Створимо файл my_module.routing.yml в корені нашого модуля. Даний файл служить для опису маршруту за базовим шаблоном. Як параметри маршруту виступають такі значення як:

  • заголовок сторінки
  • URL сторінки
  • котроллер
  • Права доступу
  • І т.д.

У нашому випадку, цих параметрів буде достатньо, що б описати сторінку.

Кожна назва роутінга має бути унікальне (my_module.routing). Список параметрів:

  • path - URL майбутньої сторінки
  • defaults - містить значення за замовчуванням. Всі значення розпочинаються з префіксів «_»
  • _title - Заголовок сторінки
  • _controller - шлях до контролера, де далі вказуються клас і метод контролера (MyModuleController :: test)
  • requirements - містить значення залежностей. Всі значення так само починаються з префіксів «_»
  • _permission - визначає доступ до сторінки, в нашому випадку «Для всіх користувачів, які мають право переглядати контент»

Хочу зауважити, що в ранніх версіях Drupal 8 використовувався «_content», замість «_controller». Переконайтеся, що ви використовуєте стабільну версію Drupal 8.

З маршрутами визначилися. Тепер займемося самим контролером, який ми вказали в параметрі «_defaults» значення «_controller».

Всі контролери модуля повинні знаходитися по шляху

Створіть необхідні папки всередині вашого модуля.

Далі, створюємо файл контролера. Файл береться з значення «_controller» в файлі my_module.routing.yml. У нашому випадку файл буде називатися, як MyModuleController.

Створимо файл MyModuleController.php в корені папки Controller. Тепер, як ви могли помітити, ми маємо справу з ООП. В даному файлі нам необхідно визначити наш клас MyModuleController і його метод test. Назви класу і методу, ми так само забираємо з файлу my_module.routing.yml. У нашому випадку, даний файл виглядає так:

Хочу зауважити, що метод test повинен завжди віддавати масив.

Так само ми використовували namespace. не варто забувати про нього, якщо не хочете отримати проблеми в майбутньому. Якщо хто не знає, дозволяє нам позбутися від 2х однаково іменованих класів.

З контролером ми так само визначилися. Тепер чистимо кеш сайту, переходимо по шляху

Пишемо свій модуль для drupal 8

Тепер, нам залишилося додати пункт меню в основне меню сайту. Для цього, в корені нашого модуля, створимо файл my_module.links.menu.yml. в якому ми і будемо описувати пункт меню. У нашому випадку, даний файл буде виглядати так:

  • title - назва пункту меню
  • description - Опис пункту меню
  • menu_name - ім'я меню, до якого хочемо додати пункт меню
  • route_name - ім'я роутінга, до якого буде прив'язаний даний пункт меню
  • weight - вага пункту меню

Пишемо свій модуль для drupal 8

Як ми бачимо, з поставленим завданням ми впоралися. Система написання модулів досить ускладнилася, але тим не менш стала більш гнучкою і нарешті ми можемо використовувати усіма нами улюблений підхід ООП.

Схожі статті