Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Разработка дополнительных модулей Drupal




Несмотря на все многообразие видов и версий модулей для Drupal, реализация некоторых функций ВОКС невозможна без создания собственных модулей. Рассмотрим пример создания простейшего модуля на примере создания блока, выводящего список ссылок на последние 10 добавленных на сайт фильмов.

Первым шагом в создании модуля является выбор "короткого имени" для него. Это короткое имя будет использоваться во всех файлах и именах функций разрабатываемого модуля. Оно должно начинаться с буквы и может содержать только буквы нижнего регистра и символ подчеркивания "_". Для примера удачным выбором будет в качестве короткого имени - "sample"

Для начала работы над модулем необходимо создать папку в инсталляции Drupal: sites/all/modules/sample (рис. 57).

Рис. 57 - Создание каталога для модуля

В каталоге sites/all/modules/current_posts не обходимо создать txt файл с расширением *.module (например, current_posts.module).

Файлы модулей начинаются с открывающего PHP тега. Важным фактом является то, что закрывающего тэга не требуется – это может стать причиной неожиданного поведения некоторых серверов. Все функции в Вашем модуле, которые будет вызывать сам Drupal, являются хуками и должны иметь имена в формате:

{имямодуля}_{имяфункции},

где {имяфункции} является предопределенным суффиксом имени функции. Drupal будет сам вызывать эти функции для получения определенных данных. Следует напомнить, что хуки (hooks) или обработчики прерываний, или обратные вызовы рассматриваются как внутренние события Drupal. Имея эти заранее определенные имена, Drupal может самостоятельно их отнести к определенной области своей структуры.

Все модули должны иметь файл 'modulename.info', который содержит так называемую META-информацию о модуле.

Общий формат:

name = Module name

description = A description of what your module does.

core = 7.x

Для разрабатываемого модуля заменим 'modulename' кратким именем нашего модуля 'sample'. Без этого файла модуль не будет показан в списке модулей. В результате должен появиться следующий код в файле с именем sample.info:

name = Sample

description = Show last films.

core = 7.x

version = "7.x-1.0"

files[]= sample.module

Созданный файл необходимо сохранить в каталоге модуля sites/all/modules/sample.

Для корректной работы модуля необходимо реализовать несколько функций:

Этот небольшой хук сообщает Drupal, что наш модуль должен породить блок. Внутри хука формируется массив с настройками блока - описание, которое буде выводиться на странице блоков и указание не кэшировать данный блок.

function sample_block_view($delta = '') {

 

$select = db_select('node','n')->fields('n',array('title','nid'))->condition('n.type','film')->orderBy('n.created','DESC')->range(0,10);

 

$entries = $select->execute()->fetchAll();

$blocks = array();

$blocks['subject'] = 'Last ten films';

$blocks['content'] = theme('sample_block', array('filmtitles' => $entries));

 

return $blocks;

}

Этот хук реализует запрос к базе данных и заполняет полученным результатом нам блок. Для данной функции должен быть определен хук HOOK_theme() внутри модуля. Аргументы tcompactmenu_block и array('urls' => $entries) говорят о том, что информацию о используемом файле шаблона нужно взять из элемента массива, возвращаемого HOOK_theme() с ключом tcompactmenu_block и передать в этот файл шаблона переменную $entries, причем в файле шаблона она будет доступна по имени $filmtitles.

function sample_theme() {

return array(

'sample_block' => array(

'variables' => array(

'filmtitles' => NULL

),

'file' => 'sample.block.inc',

'template' => 'sample-block',

)

);

}

Это программный код HOOK_theme(), который указывает Drupal какие элементы с помощью каких шаблонов темезировать и снабжает эти шаблоны переменными. Кроме того, он подключает файлы с функциями, которые будут доступны изнутри файла шаблона, чтобы не загромождать файл шаблона кодом.

На этом программная часть нашего модуля закончена. Но нам также нужно создать еще два файла: шаблон блока и сам блок.

Файл sample.block.inc – файл самого блока. Он должен содержать всего несколько символов: открывающий тэк php-кода и перевод на новую строку.

Файл sample-block.tpl.php – шаблон блока со следующим содержимым:

<div id = "sample-pager">

<?php

foreach($filmtitles as $num => $title):

echo l($title->title, 'node/'.$title->nid).'<br />';

endforeach;

?>

</div>

Таким образом, щаблон формирует из каждого элемента массива filmtitles строку-ссылку на соответствующий фильм.

На этом создание нашего модуля закончено. Далее его необходимо включить (рис. 58).

Рис. 58 - Включение нового модуля

Далее необходимо включить отображение созданного блока (рис. 59).

Рис. 59 - Включение отображения созданного блока

Результат работы модуля Sample приведен на рис. 60.

Рис. 60 - Результат работы модуля Sample

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...