Ромка!eu

  • Отдых
  • Работа
  • Штуки-дрюки
Главная — Блоги — Ромка's blog

Разработка модуля для Drupal. Часть2

  • Просмотреть
  • Голоса

Ромка — Вс, 01/03/2010 - 19:31

53
points

currencies.info

В .info-файлах модулей содержится служебная информация, без которой модуль не будет виден в системе. Начинаться любой .info-файл должен со строки

  1. ; $Id$

В файлах с PHP-кодом после открывающего тега <?php необходимо добавить строку
<?php
// $Id$
?>

Эту строку, если модуль будет размещен в официальном CVS-репозитории Drupal, заменит служебная информация. Далее в файле .info должны располагаться три обязательных параметра: название модуля, его описание и версия ядра Drupal, с которой работает модуль. Кроме того, в этом файле могут находиться необязательные параметры: минимальная версия PHP, необходимая для запуска модуля, зависимость от других модулей Drupal, без которых текущий модуль не будет работать, и пр. Подробное описание всех доступных к использованию в .info-файле параметров можно найти в официальной документации (ссылка на эту и другие цитируемые в статье страницы документации размещена во врезке «Ссылки на документацию»).

В нашем случае файл currencies.info будет иметь такой вид:

  1. ; $Id$
  2. name = Currencies block
  3. description = Show currencies
  4. core = 6.x

Административный интерфейс

Теперь приступим к реализации каждого из описанных этапов. Для начала добавим в наш файл currencies.module функцию с реализацией хука hook_perm, который, как сказано выше, определяет дополнительные права доступа. Hook_perm — один из самых простых хуков, он всего лишь возвращает массив строк, представляющих собой права доступа. После инсталляции модуля администратор сайта на странице Admin — Permissions (admin/user/permissions) может указать, какие группы пользователей имеют право доступа access currencies block settings, а мы в дальнейшем, во время реализации формы настроек модуля при помощи функции user_access, будем проверять, имеет ли текущий пользователь право доступа access currencies block settings или нет.

<?php
function currencies_perm() {
  return array(
'access currencies block settings');
}
?>

Важный момент. Пользователь с uid=1, т. е. первый созданный в системе, является суперпользователем, для него функция user_access всегда возвращает значение TRUE, а это значит, что он всегда имеет доступ ко всем функциям сайта. Это одна из причин, почему не рекомендуется работать в системе с учетной записью суперпользователя: зачастую разработчики забывают раздавать пользователям необходимые права доступа, так как сами, работая как суперпользователи, не имеют проблем с доступом к ресурсам сайта.

Для определения дополнительного системного пути, по которому в нашем примере будет доступна страница управления модулем, необходимо создать реализацию хука hook_menu:

<?php
function currencies_menu() {
  
$items = array();
  
$items['admin/settings/cur-block'] = array(
    
'title' => t('Currencies block settings'),
    
'description' => 'Currencies block settings.',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('currencies_settings'),
    
'access arguments' => array('access cur block settings'),
  );
  return 
$items;
}
?>

Эта функция также возвращает ассоциативный массив. Ключом каждого элемента массива должен быть путь, регистрируемый в системе (в нашем случае это admin/settings/cur-block), а значением — вложенный массив, содержащий информацию о создаваемом пункте меню. Давайте разберем каждый из параметров отдельно.

Title — заголовок меню — будет использоваться при переходе на страницу с адресом admin/settings/cur-block в строке заголовка браузера (тег ) и в качестве заголовка страницы (тег<br /> <h1>), а также в качестве текста ссылки, ведущей на созданную страницу настроек.</h1>

Description — описание пункта меню, которое в нашем случае будет использоваться на странице администрирования.

Page callback — функция, которая будет генерировать страницу, создаваемую по указанному пути. В простом случае значением этого параметра должна быть функция, возвращающая HTML-код, который будет показан пользователю. Однако мы по указанному адресу создаем не обычную страницу, а форму, значения которой автоматически сохраняются в БД. Поэтому для параметра page callback мы назначаем вызов системной функции drupal_get_form(), которая выведет на экран форму, созданную функцией с именем, указанным в элементе массива page arguments; в нашем случае это функция currencies_settings(). Функция currencies_settings() должна вернуть ассоциативный массив, содержащий информацию об элементах создаваемой формы. Подробнее об этом массиве будет рассказано ниже.

Access arguments — массив «прав доступа». Пользователи, обладающие правами доступа, перечисленными в этом массиве, могут получить доступ к создаваемому пункту меню. Более подробную информацию о параметрах пунктов меню можно найти в документации.

Сейчас в нашем модуле определен новый пункт меню, но не определена функция, формирующая содержимое страницы, на которую этот пункт указывает (см. листинг 2).

Листинг 2

<?php
function currencies_settings() {
  
$form['currencies_list'] = array(
    
'#type' => 'textfield',
    
'#title' => t('Currencies'),
    
'#default_value' => variable_get('currencies_list',
      
"USD,EUR,CNY,BYR,KZT,TRY,UAH,JPY"),
    
'#maxlength' => 255,
  );
  
$form['currencies_list_freq'] = array(
    
'#type' => 'textfield',
    
'#title' => t('Frequency of updating of the data
      (in seconds)'
),
    
'#default_value' => variable_get('currencies_list_freq',
      
3600),
    
'#maxlength' => 255,
    
'#description' => t('It is recommended to use value 
      not less than 3600.'
),
  );
  
$form['currencies_list_url'] = array(
    
'#type' => 'textfield',
    
'#title' => t('Адрес xml-файла'),
    
'#default_value' => variable_get('currencies_list_url',
      
"http://www.cbr.ru/scripts/XML_daily.asp?date_req=
      %d/%m/%y"
),
    
'#maxlength' => 255,
    
'#description' => t('The XML-file address.'),
  );
  return 
system_settings_form($form);
}
?>

Как и хуки hook_menu, hook_schema и многие другие хуки Drupal, эта функция должна возвращать ассоциативный массив, на этот раз содержащий информацию о параметрах создаваемой формы. Здесь мы создаем три однострочных текстовых поля (параметр #type имеет значение textfield), значения по умолчанию для которых (параметр #default_value) будут храниться и выбираться из стандартной таблицы variables Drupal при помощи функций variable_set() и variable_get(). Благодаря использованию функций drupal_get_form и system_settings_form нет необходимости заботиться о создании кнопок Submit и Reset, а также о функциях, обрабатывающих и сохраняющих данные формы. В более сложных случаях, которые будут рассмотрены в следующей статье, придется вручную создавать функции проверки введенных пользователем значений и сохранения данных. Подробное описание типов полей, используемых в формах, можно найти в документации.

Все, мы завершили разработку первой из трех частей нашего модуля — административного интерфейса и переходим к разработке второй его части — инструмента получения данных от удаленного сервера.

Ссылки на другие части этой статьи:

  • Часть 1. Основы модульной системы Друпала
  • Часть 2. Разработка простейшего модуля
  • Часть 3. Введение в темизацию Друпала (для программистов, а не дизайнеров)

Содержание всех статей: http://romka.eu/blog/my-drupal-articles

  • Drupal
  • модуль
  • статья
  • Ромка's blog
  • Quote

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Вы можете использовать тэг <code></code> для подсветки синтаксиса программного кода. Действие тэга "<foo>" аналогично тэгу "[foo]".
  • You may quote other posts using [quote] tags.

Подробнее о форматировании

CAPTCHA
Если вы человек, а не робот, то введите текст с картинки. Если вы робот, то велкам ту майкрософт.ком.
Image CAPTCHA
Enter the characters (without spaces) shown in the image.

Обо мне

Всем привет!
Меня зовут
Роман Архаров, я профессиональный веб-разработчик, программирую на языках PHP, Python и Action-Script, в работе использую фреймворки Drupal и Django. В этом блоге я размещаю заметки и статьи, связанные с моей работой, отдыхом и другими интересными мне темами.

Похожие заметки

  • Несколько статей о Друпале
  • Swftools и модуль Pdf2SWfField для Друпала
  • Разработка модуля для Drupal. Часть1. Введение
  • Пример разработки плагина для модуля CCK
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal

Популярные заметки

  • Разработка сайта на Drupal. Часть 4. Пример разработки корпоративного интранет-сайта на Drupal
  • Перетаскивание строк таблицы. Table drag and drop — плагин для jQuery
  • Cinnamon Chasers - Luv Deluxe (Music Video)
  • Разработка сайта на Drupal. Часть 3. Модули Drupal.
  • Разработка сайта на Drupal. Часть 5. Социальная сеть на Друпале
  • Разработка сайта на Drupal. Часть 6. Оптимизация Друпал
  • Разработка модуля для Drupal. Часть1. Введение
  • Куба. Лето 2008. Часть 3
  • Темизация Drupal. Часть 1
  • Пример разработки плагина для модуля CCK

Подписка


Последние комментарии

  • Гость → Знак → Явное плоскостопие
  • Anonymous → Swftools и модуль Pdf2SWfField для Друпала → Здравствуйте, Рома! Все
  • Всеволод → Разработка сайта на Drupal. Часть 4. Пример разработки корпоративного интранет-сайта на Drupal → Panels
  • vsevolod → Несколько статей о Друпале → Статьи
  • Looker → Swftools и модуль Pdf2SWfField для Друпала → Привет! Все вроде делаю
  • Feniksss89 → Динамическое добавление элементов к форме → Не получается.
  • Anonymous → Разработка сайта на Drupal. Часть 6. Оптимизация Друпал → У меня на одном из сайтов
  • Anonymous → Модуль "Курсы валют" для Drupal 6 → Модуль
  • Smith → Разработка сайта на Drupal. Часть 4. Пример разработки корпоративного интранет-сайта на Drupal → Thanks for giving out
  • Anonymous → Получение заголовков (headers) страницы при помощи Java-script → индия курсовые по физике

Новые заметки

  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 3 — Бали, Сингапур, Пхукет
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 2 — Джокьякарта
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 1 — Пхукет и Джакарта
  • Шпаргалка по командам и хоткеям Unix
  • Семинар по хапкидо в Днепропетровске
  • О планах
  • Несколько статей о Друпале
  • Темизация Drupal. Часть 4. Темизация Views
  • Темизация Drupal. Часть 3. Основы Drupal Forms API и темизация форм
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal

Тэги

Индонезия Отдых Работа Штуки-дрюки зима зима 2010 модуль статья темизация dckyiev09 Drupal jquery
еще тэги

Вход для пользователей

Что такое OpenID?
  • Войти по OpenID
  • Скрыть вход по OpenID
  • Зарегистрироваться
  • Запросить новый пароль

Навигация

  • Exchange rate
  • Vote up/down
  • Переход по внешней ссылке
  • Последние сообщения
  • Фотогалереи

Курсы валют

  • 100 Казахских тенге — 20,2044 (-0.06)
  • 10 Украинских гривен — 37,0715 (-0.11)
  • 10 Китайских юаней — 43,5819 (-0.12)
  • 100 Японских иен — 33,0298 (-0.39)
  • 1 Доллар США — 29,7499 (-0.09)
  • 1 Евро — 40,4866 (-0.03)
  • 1000 Белорусских рублей — 10,0984 (-0.05)
  • 1 Турецкая лира — 19,3760 (+0.12)

10 случайных заметок

  • Динамическое добавление элементов к форме
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 1 — Пхукет и Джакарта
  • Лето 2007. Путешествие в Камбоджу – Таиланд – Малайзию. Часть 1.
  • Панорама Гаваны
  • Тестирование модуля "Inner poll"
  • Drupal for Firebug
  • Swftools и модуль Pdf2SWfField для Друпала
  • Куба. Лето 2008. Часть 5
  • У быдла есть особенность
  • Автоматическая "газетная" верстка (верстка в несколько колонок)

Случайные фото

Крым
Эль перро
Вид на Мраморную церковь с площади Амалиенборг
Бронзовое море
Я с местным рональдом
Местный ходок
Дорожка
Гонщик
Еще одно фото резиденции короля
Вид на Осло из замка Акерхус
Копенгаген, Кристиания, Граффити 7
Осло, Карл Юхан Гате
Вид на Осло-фьерд со стены замка
Я и кокос... Где то я это уже видел...
Собака
Копенгаген, Кристиания, Граффити 5
  • Отдых
  • Работа
  • Штуки-дрюки

При использовании материалов с сайта, пожалуйста, ставьте ссылку на источник. E-mail для связи: mne@romka.eu.