Из чего состоит модуль Друпала?

Из чего состоит модуль Друпала?

Прежде чем начать создавать наш модуль я еще расскажу немного о возможностях 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.

Друпал разработать модуль.png

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

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

Друпал разработать модуль список модулей.png

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

Друпал разработать модуль убрать блок История.png

Сначала посмотрим как это работает, нам потребуется хук 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);
}

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

Друпал разработать модуль массив account.png

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

Друпал разработать модуль массив account2.png

Обратите внимание на поля 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.

Комментарии

Добавить комментарий

Войти, используя Loginza Google Account Yandex Mail.ru Vkontakte Facebook

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.

Спасибо. Урок очень помог в

Спасибо. Урок очень помог в начале освоения drupal 7. Даны самые основы и описаны элементарные вещи. Понравилось про амперсанд (полезный символ). Конечно, тем, кто хоть немного освоил drupal этот урок ничего не даст. Но я так думаю урок и не для них. А вот тем, кто впервые столкнулся с drupal - урок действительно ценный. Хорошо рассказано про хуки. Автор, спасибо!

В API Drupal 7 для

В API Drupal 7 для хука hook_user_view_alter стоит только один параметр: http://api.drupal.org/api/drupal/modules%21user%21user.api.php/function/hook_user_view_alter/7

 

Зачем в примере передается сразу 3-и параметра? 

function sitemade_user_view_alter(&$account, $view_mode, $langcode){

 

сделал все как написанно в

сделал все как написанно в статье

но ничго не выполняется

ни какой хук не работает :(

ни sitemade_user_view,
ни sitemade_user_view_alter

 

в логах ни каких ошибок нет.

 

версия друпал 7.17

 

Чего не так??

1. Почистите кеш 2. Проверьте

1. Почистите кеш

2. Проверьте что модуль включен?

3. Сделайте какую-нибудь ошибку в модуле, "сломался" ли сайт?

4. Сделайте какую-нибудь ошибку в хуке, "сломался" ли сайт?

 

Сделайте эти проверки и поймете где у вас не работает модуль.

В 7м Друпале у меня не вышла

В 7м Друпале у меня не вышла установка модуля прсотым создание страктуры в соотв. каталоге. Модуль был не видим. Хотя очищал кеш. Модуль стал доступен только после установки его через инсталлятор Друпала.