Решил написать статейку о том как создаются блоки…
Я уже писал о том, как создать модуль для использования AJAX в drupal7.
Теперь же речь пойдёт о том, как создать модуль для вывода блока.
Возможно вы удивлены, ведь блок можно создать простыми средствами drupal, но иногда возникает ситуация, что проще один раз написать блок, а потом его просто устанавливать в виде модуля drupal.
Этим и займёмся. Писать будем на примере Системы Orphus. Кто не знает, это js приложения дающее возможность исправлять ошибки на сайте. Пользователь видит ошибку выделяет участок текста и жмёт Ctrl + Enter, после чего на email владельца сайта приходит уведомление. Просто и удобно, особенно для таких грамотеев как я 😉
Итак. Нам нужен модуль который будет выводить код в виде блока. Код — это вставка скрипта и картинки.
Проще этого разве hello world, который уже порядком поднадоел.
Создаём директорию для модуля в папке sites/all/modules/ вашего drupal 7. У меня папка называется orphus
Внутри создаём 2 файла:
orphus.info и orphus.module.
Первый — содержит имя, описание, зависимости, ну в общем всё что нужно друпалу, чтобы понять что это вообще такое.
Тут думать неочем вот его содержимое:
name = Orphus block description = Добавляет блок для вставки системы Orphus version = 1.0 core = 7.x
Второй же файл содержит реализацию плагина и сам код, который и добавит наш блок.
Для программного создания блока в друпал 7 нужно использовать 2 функции (так называемые хуки):
hook_block_info() и hook_block_view()
Первая создаёт блок (его имя, описание и настройки), вторая — задаёт описание блока, ну и его вывод.
Итак файл orphus.module:
<?php /** * Реализация hook_block_info() */ function orphus_block_info() { $blocks['orphus block'] = array( // имя блока - индекс массива 'info' => t('My orphus block'), ); return $blocks; } /** * Реализация hook_block_view() */ function orphus_block_view($delta = '') { $block = array(); switch ($delta) { case 'orphus block': $block['subject'] = t('orphus block'); $block['content'] = "<a href=\"https://orphus.ru\" id=\"orphus\" target=\"_blank\"><img src=".drupal_get_path('module', 'orphus') . '/orphus.gif border="0" width="240" height="80"></a>'; break; } return $block; } ?>
Пояснений для кода думай делать и не надо. Ведь в ходе двух функций мы просто заполнили необходимыми данные массивы.
Обратите внимание, что если вы собираетесь сделать несколько блоков в одном модуле то, вызов switch во второй функции становиться не таким уж и не нужным 😉 Просто добавляете следующий case и редактируйте действия…