Ромка!eu

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

Это старая (Drupal 6) версия сайта romka.eu. Она больше не обновляется, комментирование материалов отключено. Обновленная версия сайта доступна по адресу http://romka.eu.

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

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

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

Благодарности

icemen (не проверено) → Вс, 08/29/2010 - 21:21

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

Разработка простейшего модуля

Snick → Ср, 02/02/2011 - 14:46

Drupal 7. При попытке добавить модуль currencies выдается сообщение: "currencies.zip не содержит ни одного .info файла." Вот содержимое Currencies.info:

; $Id: Currencies.info $
name = PHPinfo
description = Show currencies block.
files[] = Currencies.module
files[] = Currencies.install
core = 7.x

PHPinfo - это название страницы сайта. Сайт на локальной машине под Apache, PHP 5.3.5, MS SQL Server 2008 Express

Уж что только не менял, но...

Разработка простейшего модуля

Snick → Пт, 02/04/2011 - 20:14

Чушь я спросил, разобрался.

сабака бешеная

Anonymous (не проверено) → Втр, 04/10/2012 - 17:41

я маму рот ибал этого афтара

Автору респект! А собака

Anonymous (не проверено) → Ср, 04/11/2012 - 14:27

Автору респект!
А собака бешенная - это гнида черножепая.
Так в фильме "Брат" говорится.

Обо мне

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

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

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

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

  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Перетаскивание строк таблицы. Table drag and drop — плагин для jQuery
  • Темизация Drupal. Часть 3. Основы Drupal Forms API и темизация форм
  • Темизация Drupal. Часть 4. Темизация Views
  • AJAX. Обмен данными между клиентом и сервером, закачка на сервер файлов без перезагрузки страницы при помощи библиотеки jQuery.
  • Кеширование на Drupal-сайте. Сравнение встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Varnish
  • Тестирование модуля "Inner poll"
  • Несколько панорам из путешествия по Перу и Боливии
  • Arduino + bluetooth, небольшая проблема
  • Пример разработки плагина для модуля CCK

Подписка


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

  • drupal-admin → Кеширование на Drupal-сайте. Сравнение эффективности встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Var → Отличная статья
  • Меховщиков Руслана → Проверка имени пользователя на наличие букв из разных алфавитов → Re: Читал про это уже на
  • Вероника → Куба. Лето 2008. Часть 3 → По поводу "приветливых жителей" Тринидада
  • Sfero → Статья в PC Magazine/RE. Drupal: разработка модуля → Немного о контенте
  • RemaGe → Статья в PC Magazine/RE. Drupal: разработка модуля → -)
  • Ромка → Статья в PC Magazine/RE. Drupal: разработка модуля → Да, будет сборка, та которую
  • RemaGe → Статья в PC Magazine/RE. Drupal: разработка модуля → -)
  • anatinge → Поездка в Киев → спасибо :)
  • Ромка → Поездка в Киев → Да, в общем-то, ничего
  • GogA → Поездка в Киев → Заинтриговал, что там за

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

  • Кеширование на Drupal-сайте. Сравнение встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Varnish
  • Любопытное поведение модуля syslog в шестом Друпале (баг?)
  • Arduino + bluetooth, небольшая проблема
  • Гугл 1 марта прекратил поддержку сервиса Google Friend Connect
  • Проба пера в HTML5 + canvas. Эффект ластика
  • Шесть рукопожатий
  • Доклад на DrupalConfMoscow 2011
  • Статусы разных сущностей в Друпале 6
  • Футер, прибитый к низу страницы
  • Путешествие по Перу и Боливии. Часть 2

Тэги

Drupal jquery Куба Лето 2007 Лето 2008 Отдых Работа Штуки-дрюки лето модуль статья цитата
еще тэги

Навигация

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

Курсы валют

  • 100 Казахстанских тенге — 21,3687 (-0.43)
  • 10 Украинских гривен — 27,2852 (-13.04)
  • 1 Китайский юань — 10,2706 (-40.98)
  • 100 Японских иен — 53,5332 (+12.67)
  • 1 Доллар США — 65,6210 (+33)
  • 1 Евро — 69,8076 (+29.42)
  • 10000 Белорусских рублей — 36,3310 (-2.51)
  • 1 Турецкая лира — 22,9540 (+4.99)

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

  • Swftools и модуль Pdf2SWfField для Друпала
  • Лето 2007. Путешествие в Камбоджу – Таиланд – Малайзию. Часть 5. Острова Самуй и Панган, лето
  • Шпаргалка по командам и хоткеям Unix
  • Статья в PC Magazine/RE. Drupal: разработка модуля
  • Футер, прибитый к низу страницы
  • Куба, остров Святой Марии.
  • Пример разработки плагина для модуля CCK
  • Лето 2007. Путешествие в Камбоджу – Таиланд – Малайзию. Часть 2. Камбоджа, Сиануквилль.
  • Разработка сайта на Drupal. Часть 5. Социальная сеть на Друпале
  • Друпал ограничен только способностями разработчика!

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

Красная поляна
Фонтаны в Осло работают даже зимой. Карл Юхан Гате
Арка
В аэропорту
Тринидадские спортсменчики
Без имени
Вид на Осло-фьерд со стены замка
Я и бамбук
В Сингапурском зоопарке. Попугай
Копенгаген, Кристиания, Граффити 6
Копенгаген, Кристиания, Граффити 4
Местный ходок
Закат в Гаване
Старая и новая наши машины — пыжик и сузуки джимни
Вид на Осло из замка Акерхус
В Сингапурском зоопарке. Леопардовая (бенгальская) кошка.
  • Отдых
  • Работа

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