Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Из чего состоит модуль Drupal 7?

02/12/2019, by Ivan

Прежде чем начать создавать наш модуль я еще расскажу немного о возможностях API Друпала. API предоставляет широкие возможности для работы с Таксономией, нодами, пользователями, ввода и вывода из БД. Для взаимосвязи модулей и ядра Друпала, а также модулей между собой, в Друпале есть система хуков. Хук это обратный вызов функции, то есть когда выполнение кода доходит до хука, то происходит добавление кода нашей функции, которую мы дописываем в своем модуле. Таким образом мы можем обработать данные пользователя, меню, таксономии, нод различных контент типов.

На странице

http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/7

Приведен список хуков ядра Друпала, заметьте что для каждой версии ядра список хуков отличается. Я собираюсь создать модуль для Друпала 7ой версии, поэтому и хук мы будем использовать для 7ой версии.
Хуки в Друпале имеют следующий вид:

ИмяМодуля_НазваниеХука

Поэтому там где в имени хука написано hook, вместо слова hook нужно поставить имя Вашего модуля, где этот хук применяется.

Для начала нужно создать сам модуль.

1. Создаем в папке sites/all/modules папку с будущим названием модуля. Я назову модуль site-made.

2. В папке модуля нужно создать два файла ИмяМодуля.info и ИмяМодуля.module. У меня это будут sitemade.info и sitemade.module.

Drupal модуль

3. Теперь в файле sitemade.info мы напишем:

;$Id$ //этот комментарий необхоим, чтобы упростить загрузку модуля на сайт drupal.org
name = Sitemade module //Имя нашего модуля в списке других модулей
package = sitemade //Имя пакета в который входит наш модуль
core = 7.x //версия Друпала для которого мы делаем модуль
files[] = sitemade.module //в массив files записываем файлы где есть PHP-код

В файле sitemade.module мы пишем начало php-кода:

<?php  //тег можно не закрывать
//$Id$ //также добавлен для удобства загрузки на drupal.org

 Теперь наш модуль должен появится среди других модулей, давайте включим его:

Друпал модуль

 Теперь, когда молуь включен, мы можем добавлять код. Я предлагаю убрать текстовый блок History (История) со страницы пользователя:

Drupal block

Сначала посмотрим как это работает, нам потребуется хук hook_user_view:

http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_view/7

Смысл этого хука следующий. Когда Друпал выполняет код, нужный для просмотра страницы пользователя, то он включает в выполняемый код хук нашего модуля. В нашем модуле мы удалим из массива account информацию о истории пользователя. Открываем наш файл sitemade.module и вставляем следующий текст хука:

function sitemade_user_view($account, $view_mode, $langcode){
    print_r($account);
}

Сохраните файл модуля и очистите кэш Друпала, это нужно чтобы хук был добавлен в код. Теперь у вас в верхней части странице будет набор слов:

Drupal module

На самом деле это массив $account, который нам предоставляет hook_user_view, а print_r это функция который этот массив выводит на страницу. Если у Вас установлена Mozilla Firefox (я рекомендую использовать его для разработки сайтов), то нажмите CTRL+U (исходный текст странице) и Вы увидите из чего состоит этот массив.

Drupal account

Обратите внимание на поля uid и name,  в них записаны ID пользователя и имя пользователя соответственно. Эти поля очень часто используются при создание ссылок на профили или материалы создаваемые пользователем.

Как Вы видите здесь только данные о пользователе, информации о текстовом блоке History (История) нет. Давайте попробуем использовать другой хук hook_user_view_alter:

http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_view_alter/7

изменим код модуля на:

function sitemade_user_view_alter($account, $view_mode, $langcode){
    print_r($account);
}

Сохраните изменения. Выводимый массив должен измениться, account теперь только поле в этом массиве. А вот в поле summary находится информация для блока History (История). Давайте попробуем удалить эту информацию и посмотрим, что получится. Удалять информацию мы будем функцией unset

function sitemade_user_view_alter($account, $view_mode, $langcode){
  unset($account['summary']);
  print_r($account);
}

 У меня удалилось поле summary, однако блок История осталось, почему? Потому что в параметрах функции стоит просто переменная обозначенная знаком доллара - $. Это означает, что мы принимаем значения текущего пользователя в локальную переменную $account, производим изменения, выводим на страницу, а обратной связи со значениями пользователя нет. Нужно поставить перед переменной знаком $ амперсанд, чтобы все локальные изменения внутри функции с переменной account происходили и со значениями той переменной, что передается в функцию. Итак, давайте добавим знак амперсанда.

function sitemade_user_view_alter(&$account, $view_mode, $langcode){
  unset($account['summary']);
  print_r($account);
}

Сохраните изменения в файле и очистите кэш. История (History) должно исчезнуть. Этот знак амперсанда создает ссылку на переменную $account. Подробнее о ссылка PHP вы можете прочитать в любом учебнике по программированию на PHP.