Обычно изучив ту или иную CMS я начинаю писать о ней или забываю и не возвращаюсь к ней, к тому же Modx и Joomla хватало для решения любых задач, в том числе для построения любых сайтов, когда не хватало переходил на Zend Framework 2. Из всех просмотренных мной CMS(их около десятка) я отобрал joomla, modx и drupal. Drupal попал в список CMS, заслуживающих внимания за возможность использования MVC, хорошей маршрутизации и быстрой интеграции сторонних скрипов в CMS. Мой первый модуль на Drupal был написан на версии Drupal 6.
Где размещать файлы модулей Drupal.
Для размещения файлов я использую директорию "/sites/all/modules/". Мой модуль называется "test-module" поэтому директория модуля будет "/sites/all/modules/test-module ".
Обязательными файлами в директории модуля являются:
- test_module.module - файл, содержащий php код, который является "сердцем" модуля;
- test_module.info - информационный файл, содержаний информацию о названии, описание, версию и т.д.
Обязательные для модуля функции
Обязательной функцией для модуля является функция "main", при этом большинство функции модулей Drupal должны начинаться с префикса названия модуля, так как в нашем случае название модуля "test_module", следовательно, полное имя функции "test_module_main".
Функция "test_module_menu" должна возвращать массив устанавливающий маршрутом, в нашем случае это два адреса первый для страниц сайта, второй для администраторского раздела. Разберём первый массив.
ключи массива и их назначение:
- title - заголовок страницы;
- page callback - функция обработчик, вызываемый при открытии страницы по адресу “/honda/”, в нашем случае - "main_function";
- access callback - функция проверяющая имеет ли пользователь доступ к данному элементу меню, в нашем случае это простая заглушка;
- access arguments - массив аргументов, передаваемых в функцию, проверяющую права для доступа пользователю к данному модулю, которая определена в элементе массива "access callback".
- type - тип меню, в наше случае это функция (http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_menu/7);
- page arguments - массив аргументов, передаваемых в функцию, выполняемую при разборе нашего адреса (указана в параметре "page callback").
Второй элемент массива $items['admin/settings/editorpanel'] предназначен для доступа к администраторскому разделу, в нашем случае перейдя по адресу "admin/settings/editorpanel", будет выполнена функция "drupal_goto", в которую будут переданы аргументы.
Для простого модуля мне не понадобилась функциональность в администраторском разделе, так как модуль выводил данные из базы для пользователей на страницах сайта, поэтому никаких функций для администраторского раздела я не использовал.
Функция, которая выполняет основную работу в модуле, может выглядеть следующим образом:
Всё здесь я думаю понятно за исключением функция $output = theme('test_block', $imgblock,$nameblock_ru,$nameblock_en,$year,$model,$dvigatel);, которая предназначена для выбора шаблона, в который будет выводится все данные работы модуля, то есть это своеобразное представление модуля. Пример указан ниже:
После выполнения данной функции в шаблоне "test-block.tpl.php" будут доступны все переменные, которые мы передали в него. Шаблон - это обычный файл php, поэтому в нем может содержаться любая разметка html кода.
Не забывайте, про маршрутизацию, доступ к нашему модулю можно получить по адресу – "/honda", но и по адресу - "honda/aaa/bbb/ccc", тогда в качестве параметров функция "main_function" примет аргументы $year (aaa),$model (bbb),$type (ccc).
104 просмотра
Взаимосвязанные материалы
Для замены стандартной иконки загрузки (Throbber) в Drupal 8 необходимо добавить следующий js код:
читать...Долго пришлось искать проблему не отображения файлов для которых созданы стили в Drupal 8. читать...
Если в последних версиях Drupal 8 появилась ошибка "Temporary file '*****.tmp' could not be created"
необходимо добавить в файл \sites\default\settings.php строку
читать...Несколько раз сталкивался с тем что последний элемент Breadcrumb кэшировался на страницах с типом "node", несмотря на то, что страница менялась. То же самое наблюдалось и с view.
читать...О том, как осуществить вывод информации с использованием ajax в Drupal 8. В Drupal 8 имеется несколько методов вывода информации через ajax - c применением методов Api и с использованием стандартных функций jQuery. При этом jQuery в Drupal 8 установлена по умолчанию. читать...