Создание модуля Drupal

Опубликовано 2012.04.14 в разделе Drupal

Как вы уж знаете - модуль в Drupal-это самостоятельный функционал, который может взаимодействовать с другими модулями, с темами и с ядром системы. Разрабатывать собственные модули несложно.

Для создания модуля необходимо создать файл модуля(.module) и файл с информацией о модуле(.info). Это обязательный минимум. Также модуль может включать в себя другие php файлы, различные шаблоны, файлы стилей, JavaScript и т.д.

Info файл, файл module и папка модуля должны иметь одинаковые названия.

Файл info содержит в себе информацию о модуле.

name = Название модуля.

description = Его описание. Короткое, буквально 1 предложение.

package = «пакет модуля». Об этом чуть ниже.

dependencies[] = Необходимые модули для работы модуля.

core = Ядро Drupal, на которое рассчитан модуль

version = Версия модуля

project = Папка модуля

datestamp = Дата создания модуля

Создаем модуль с именем Test module.

Файл test_module.info будет иметь следующее содержание.

  1. name = Мой первый тестовый модуль.
  2. description = В этом модуле я буду учиться писать свои собственные модули.
  3. package = test_modules
  4. core=7.x
  5. version = "7.x-1.x-dev"
  6. project = "test_module"
  7. datestamp = "1332419400"

Файл test_module.module будет иметь следующее содержание.

  1. function test_module_menu(){
  2. $items = array();
  3.  
  4. $items['test_url'] = array(
  5. 'title' => 'Заголовок страницы',//заголовок страницы
  6. 'page callback' => 'main_function',//имя функции
  7. 'type' => MENU_NORMAL_ITEM, //тип страницы
  8. 'access callback' => TRUE, //доступ к странице
  9. );
  10.  
  11. return $items;
  12. }
  13.  
  14. function main_function(){
  15. return 'Содержимое тестовой страницы.';
  16. }

Это чистый php код, поэтому открыть пхпшные скобки обязательно нужно

Помещаем эти файлы в папку с именем test_module и кладем в директорию /sites/all/modules

Если вы всё сделали правильно - то в списке модулей должен отобразиться новый модуль.

Как видите-Drupal легко понял русский текст и поместил модуль в наш пакет под названием test_modules, который мы указали в info файле. Если указать этот же пакет в другом модуле-то этот модуль окажется в этом же пакете. Это позволяет удобно группировать модули. Иначе в них просто невозможно будет разобраться, так как модулей может быть огромное количество.

Включаем модуль.

Если вместо русских букв вы увидели крикозябры-значит info файл имеет кодировку не UTF-8. Сохраните в ней. Например, в Notepad++ это делается так:

Именно преобразовать, а не кодировать. Будьте внимательны.

Вкратце поясню, как работает данный модуль. Всё содержимое модуля находится в файле с расширением module.

В него мы поместили функцию test_module_menu и main_function.

test_module_menu – это использование hook_menu, для создания страниц в Drupal. Это один из важнейших хуков в Drupal. Что такое хуки и как ими пользоваться будет чуть ниже, а пока просто используем его. Чтобы использовать этот хук – создаем функцию с именем <имя модуля>_<имя хука>. В нашем случае это test_module_menu. Эта функция должна возвращать ассоциативный многомерный массив. Ключи этого массива будут адресами страниц, а содержимое элементов отвечают за содержание страницы, доступ к ней и другие параметры.

Пока мы будем использовать только 4 «настройки» страниц. Это её заголовок, тип страницы, право доступа и имя функции, которая отрисует данную страницу.

  1. function test_module_menu(){
  2. $items = array();
  3.  
  4. $items['test_url'] = array(
  5. 'title' => 'Заголовок страницы',//заголовок страницы
  6. 'page callback' => 'main_function',//имя функции
  7. 'type' => MENU_NORMAL_ITEM, //тип страницы
  8. 'access callback' => TRUE, //доступ к странице
  9. );
  10.  
  11. return $items;
  12. }
  13.  
  14. function main_function(){
  15. return 'Содержимое тестовой страницы.';
  16. }

 А main_function - это функция, указанная в hook_menu, в 8 строке. Её название может быть любым. И она вызывается при переходе по test_url. Обратите внимание, что эта функция должна не выводить(echo,print) данные, а возвращать их(return).

Если теперь перейти на URL test_url то увидим следующее.

Как видите – мы получили требуемый заголовок и содержимое страницы. Всё это успешно встроилось в интерфейс Drupal.

Таким образом можно создавать страницы в Drupal 7. Подробнее об этом есть также в этом уроке.


18 Комментариев

Оставить комментарий

  1. Гость 2016/10/10

    Спасибо большое за Ваши объяснения!
    Вопрос, пожалуйста: должна ли эта страница в тестовом примере уже существовать в сайте, или же она сама создается модулем?
    Спасибо

    Ответить

    1. Гость 2016/10/10

      РЕШЕНО: необходимо предварительно создать не страницу, а естественно, пункт меню.

      Ответить

      1. Админ 2016/10/11

        Ну если вы в hook_menu создали $items['test_url'] - то этот урл создастся. И потом его уже в меню можно добавить.
        В модуле может вообще не быть этого хука, если страницы вам не нужны.

        Ответить

        1. Гость 2016/10/11

          Спасибо, учту.

          Ответить

  2. Гость 2016/05/16

    datestamp = "1332419400"

    циферки отбалды?

    Ответить

    1. Админ 2016/05/16

      Ага. Если модуль для личного пользования - они ни на что не влияют.

      Ответить

  3. Гость 2015/03/25

    у меня при вводе /test_url - пишет страница не найдена

    Ответить

    1. Админ 2015/03/25

      Ваш модуль называется test_module, в нём есть функция test_module_menu, которая возвращает массив? И этот модуль включен?
      Кэш друпала пробовали чистить?

      Ответить

  4. Гость 2015/02/06

    Notice: Undefined variable: form в функции main_function() (строка 16 в файле /var/www/html/newnti/sites/all/modules/my_history/my_history.module).

    Ответить

    1. Админ 2015/02/06

      Да точно, спасибо. Видимо это издержки копипаста.

      Ответить

  5. Гость 2014/04/03

    спасибо!
    разжевано как для младенца :)
    особенно радует наличие скринов.
    только бы их чуть поменьше размерами, тем более для слабовидящих здесь и colorbox включен :)

    Ответить

    1. Админ 2014/04/03

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

      Ответить

  6. Гость 2014/01/16

    Здравствуйте. С интересом прочитал Вашу статью. Сам я в пхп не силён. Пишу потому что увидел как у Вас тут комментарии выводятся. Как это сделано? Через модуль или средствами вьювс? Если это Ваш собственный модуль, не могли бы Вы со мной им поделиться?

    Ответить

    1. Админ 2014/01/17

      Добрый день.
      А что именно в комментариях необычного? Это стандартные комментарии друпала. Включена древовидность и всё. Никаких доп модулей.

      Ответить

      1. Гость 2014/01/17

        В 7-м друпале я не нашел возможности показывать комментарии списком. К тому же, они вылезают в анонсы вместе с кнопочкой "комментировать". А необычность Вашей формы комментариев для меня была в том, что я не догадался, что можно просто включить в доступах возможность настройки комментариев для гостей.)

        Ответить

        1. Админ 2014/01/19

          Есть это в семерке. Нужно:
          зайти в типы материалов
          выбрать нужный тип
          настройка
          таб "Комментарии"
          и там выбрать как отображать каменты.

          Ответить

  7. Гость 2013/06/18

    В оригинале ваш модуль не заработал - пришлось дописать

    Ответить

    1. Админ 2013/06/19

      Конечно, это же чистый php код.

      Ответить

Ваш комментарий успешно создан

Ваш комментарий

  • Для выделения кода оберните его в тэги <code> и </code>
  • Отметьте аналитику