Отделяем логику от шаблона в Drupal

Наверняка вы слыхали о подходе MVC (model-view-controller) в веб-программировании. В Drupal для реализации данного подхода есть все необходимые инструменты. При этом уровень контроллера по большей части уже реализован, т.к. движок предлагает вам реализовать логику приложения в виде написания кода «зацепок» (hooks). Вам остается отделить логику (модель) от шаблона (представления).

Давайте рассмотрим этапы объявления и использования шаблонов в модуле Drupal.

Сформулируем учебную задачу.

На отдельной странице сайта выведем таблицу квадратов чисел из какого то диапазона внутри [0 … 1000]. Оформим это как модуль mymodule.

Создаём раздел и пишем логику

Во-первых, нам нужно объявить раздел, для чего мы используем hook_menu.

Для данного раздела, который находится по адресу — mysite.ru/page-with-table, мы сопоставили функцию _mymodule_page. Эта функция будет отвечать за логику данной страницы и должна вернуть её содержимое.

Чтобы управлять диапазоном чисел, для которого будет выводится таблица, мы воспользуемся неявной передачей параметров. Если мы введем адрес вроде:

то в функцию-обработчик раздела будут переданы части строки «1» и «20» как входные параметры.

В функции мы реализовали всю логику: проверили входные параметры, и передали их в шаблон. Но где брать этот шаблон, какие у него параметры — Drupal не знает. Расскажем Drupal, где находятся шаблоны. Эти сведения предоставляются через hook_theme.

После изменений в hook_menu и hook_theme следует сбрасывать кеш, чтобы новые настройки были прочитаны Drupal. В 6-й версии эти настройки находятся в разделе админки — производительность -/admin/settings/performance.

Объявим шаблоны в модуле, создадим файлы шаблонов

Я хочу разместить файлы шаблонов в отдельной папке активной темы оформления. Шаблонов будет два : общий шаблон HTML таблицы, который мы уже задействовали в _mymodule_page(), и шаблон строк таблицы, который будет вызывать из первого шаблона для каждой строки данных при составлении таблицы.

В документации hook_theme имеет ряд параметров, которые мы не используем. Потому я их на стал перечислять.

Чтобы указать местоположение файла, я использую параметр path со ссылкой на активную тему path_to_theme(). К нему я прибавляю имя подкаталога. Имена файлов (параметр template) указываются без расширения, т.е. вместо «table-row.tpl.php», я указываю просто «table-row».

Осталось создать шаблоны.

Это шаблон таблицы. Можно использовать специальный php-синтаксис для оформления шаблонов, но я оставляю это на ваше усмотрение.

Шаблон строки таблицы ещё короче.

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

Переносим шаблоны в модуль.

Вообще-то можно было разместить шаблоны прямо в папке нашего модуля mymodule. Это будет логично, если шаблоны необходимы только этому модулю.

Мало букафф? Читайте есчо !

Как удалить объявленный ранее @RestResource

Июль 12, 2023 г.

Сначала вы создали в Drupal rest ресурс - /Plugin/rest/resource, поработали с ним, а потом пришло время прощаться. Но вот проблема - система уже знает о ресурсе, и если вы удалите файл, то при попытке зайти в админ панель расширений /admin/modules, вы ...

Читать

Создание условий `или` в запросах через db API Drupal

Январь 4, 2019 г.

Конструирование запросов через Drupal DB API необходимо для поддержки совместимости кода для разных источников данных. Друпал предоставляет и более прямые средства для написания запросов вроде db_query, и никто не может запретить вам применить функционал ...

Читать

Drupal migration из CSV файла

Март 1, 2024 г.

API миграции в Drupal позволяет "тащить" данные из разных источников, но работает это на базе контрибных модулей, т.е. не из коробки. Например, модуль migrate_source_csv добавляет возможность добавить CSV файл как источник данных. Создание каких ...

Читать

Удаление неиспользуемых файлов в Drupal

Октябрь 17, 2024 г.

Особенно полезно, когда вы использовали проект как шаблон для другого сайта и надо почистить данные. Друпал хоть и показывает статистику использования файлов, но удалять файлы не позволяет из реестра /admin/content/files. Напишем небольшой скрипт, ...

Читать
 

Комментарии к «Отделяем логику от шаблона в Drupal»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: