Пишем модуль (продолжение 1)

Главные вкладки

Аватар пользователя s_serg@drupal.org s_serg@drupal.org 22 июня 2005 в 23:45

Как дать знать drupal о новой функции

Как упоминалось ранее, функция, которую мы написали не является хуком. Её имя не будет распознано drupal. Нужно указать drupal, как использовать нашу функцию при отображении страницы. Это делается посредством хука с именем menu(). Хук menu() ассоциирует функцию, создающую содержимое страницы, с url этой страницы. Хук также осуществляет проверку разрешений на использование, если нужно.

<?php
function onthisdate_menu() {
$items = array();
$items[] = array('path' => 'onthisdate',
'title' => t('on this date'),
'callback' => '_onthisdate_all',
'access' => user_access('access content'),
'type' => MENU_CALLBACK);
return $items;
}
?>

Код выше означает, если пользователь воспользовался модулем (неважно через ?q=onthisdate или
http://.../onthisdate), содержимое страницы будет сгенерированно функцией onthisdate_all. Заголовком страницы будет "on this date" ("втечение этого дня"). Тип MENU_CALLBACK говорит drupal не отображать ссылку в меню пользователя, а только вызвать соответствующую функцию при доступе к странице по url. Используйте MENU_LOCAL_TASK, если хотите, чтобы пользователь увидел ссылку в блоке навигации по сайту.

Перейдите по адресу /onthisdate (или ?q=onthisdate) и посмотрите, что получилось.

Как дать знать drupal о новом модуле

Первая функция, которую мы напишем, предоставит drupal имя и описание модуля. Имя хука для такой функции - help. Итак, начнём с функции onthisdate_help:

<?php
function onthisdate_help($section='''') {
}
?>

Переменная$section содержит контекст справки: где, в drupal или в модуле требуется справка. Рекомендуем обрабатывать значения этой переменной с помощью конструкции switch. Вы увидите использование этой конструкции в других модулях.

<?php
/**
* Отображает помощь и информацию о модуле
* param section для какой части сайта отображать помощь
* return текст помощи для части сайта
*/
function onthisdate_help($section='''') {
$output = '''';
switch ($section) {
case "admin/modules#description":
$output = t("Displays links to nodes created on this date");
break;
}
return $output;
} // function onthisdate_help
?>

Вы скорее всего захотите добавить и другие варианты (метки case оператора switch), чтобы предоставить полную справку пользователям сайта. В частности, "admin/help#onthisdate" отобразит основную страницу справки (при доступе через url admin/help к нашему модулю).

Как дать знать drupal, кто может использовать модуль

Следующая функция, которую мы напишем - функция, определяющая разрешения доступа. Эта функция не выдаёт разрешений. Она определяет только, какие разрешения необходимы модулю. Доступ, основанный на разрешениях описан ниже в {module}_access функции. В данном примере, мы даём разрешение любому, кто имеет доступ к содержимому сайта или, кто может управлять модулем (администрировать):

<?php
/**
* Допустимые разрешения для этого модуля
* return array массив разрешений для модуля onthisdate
*/
function onthisdate_perm() {
return array('access content');
} // function onthisdate_perm()
?>

Если вы собираетесь писать модуль, который должен иметь более строгий контроль над разрешениями доступа и собираетесь реализовать сам механизм контроля разрешений, вам нужно расширить набор разрешений. Это можно сделать добавлением строк в возвращаемый функцией массив.
Пример:

<?php
function onthisdate_perm() {
return array('access content', 'access onthisdate', 'administer onthisdate');
} // function onthisdate_perm
?>

В этом руководстве начнём с первого варианта. В дальнейшем перейдём к следующей версии.

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

Строки разрешений должны быть уникальными в рамках вашего модуля. В противном случае страница разрешений будет содержать одно разрешение многократно.

Комментарии

Аватар пользователя s_serg@drupal.org s_serg@drupal.org 26 июня 2005 в 14:05

Хуки это механизм обмена данными между модулем и движком (основой) сайта.
Например, движок "спрашивает" у модуля: "что написать в пункте меню, к тебе ведущем"? Модуль "отвечает", что то-то и то-то. Хук - просто функция с определённым именем; когда движок "спрашивает", он вызывает её. Модуль из функции возвращает ответ.