Мой первый модуль на Drupal 6

Опубликовано admin - сб, 11/03/2012 - 12:29

Обычно изучив ту или иную 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).

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

# 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%!