Разработка модулей Drupal
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2102
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2435
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2451
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2456
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2461
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2467
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2479
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2496
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2497
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2498
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2499
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2517
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2518
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2519
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2520
Deprecated: Non-static method MagicWord::get() should not be called statically, assuming $this from incompatible context in /home/clients/newman_ftp0/domains/wiki.pws.ru/html/includes/Parser.php on line 2550
Материал из Newman's WiKi.
Версия 12:18, 4 декабря 2008 WikiSysop (Обсуждение | вклад) (→Файл описания модуля Drupal) ← К предыдущему изменению |
Текущая версия WikiSysop (Обсуждение | вклад) (→Меню) |
||
Строка 5: | Строка 5: | ||
* '''modulename.info''' - файл описания модуля | * '''modulename.info''' - файл описания модуля | ||
* '''modulename.module''' - файл с кодом модуля | * '''modulename.module''' - файл с кодом модуля | ||
+ | |||
+ | ''Грабли:'' без вышеуказанных файлов [[Drupal]] даже не определит папку как модуль. | ||
Также могут потребоваться следующие файлы: | Также могут потребоваться следующие файлы: | ||
Строка 14: | Строка 16: | ||
Этот файл имеет следующий формат: | Этот файл имеет следующий формат: | ||
- | <nowiki> | + | <pre> |
name = modulename | name = modulename | ||
description = Description of module. | description = Description of module. | ||
Строка 20: | Строка 22: | ||
version = VERSION | version = VERSION | ||
core = 6.x | core = 6.x | ||
- | </nowiki> | + | </pre> |
+ | Параметры '''name''' и '''description''' могут содержать произвольный текст и отображаются в списке модулей, который видит администратор сайта. | ||
+ | |||
+ | '''package''' задает тим модуля. Либо это системный модуль [[Drupal]] (Core), либо это дополнительный модуль (Core - optional) | ||
+ | |||
+ | '''core''' определяет версию ядра [[Drupal]] с которой может работать данный модуль. | ||
+ | |||
+ | Еще может присутствовать информация о зависимости модулей. Указываются модули от которых зависит создаваемый модуль. Ниже приведена строка указывающая что создаваемый модуль требует для своей работы модуль комментариев. | ||
+ | <pre> | ||
+ | dependencies[] = comment | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | Помимо этих строк могут быть строки добавленные системой версий и другая служебная информация. | ||
== Установка и инициализация модуля == | == Установка и инициализация модуля == | ||
Функции для установки и деинсталяции модуля указываются в файле '''modules/modulename/modulename.install'''. | Функции для установки и деинсталяции модуля указываются в файле '''modules/modulename/modulename.install'''. | ||
- | При отладке возможны грабли. Функция установки может не сработать если до этого не была проведена корректное отключение модуля. В этом случае Drupal клинит и он считает что install вызывать не надо. Лечится удалением соответствующей строки из таблицы '''system'''. | + | При отладке возможны грабли. Функция установки может не сработать если до этого не была проведена корректное отключение модуля. В этом случае [[Drupal]] клинит и он считает что install вызывать не надо. Лечится удалением соответствующей строки из таблицы '''system'''. |
+ | == Код модуля == | ||
+ | Основной код модуля находится в файле '''modulename.module'''. | ||
+ | === Хуки === | ||
+ | Базовая логика модуля строится на использовании функций хуков (hook_). В системе существует ряд системных функций с префиксом ''hook_''. Внутри модуля есть возможность задавать свои функции, которые будут переопределять поведение и работу системы. Переопределение происходит довольно просто - в код модуля добавляется определение и реализации функции, но только у с указанием названия модуля в качестве префикса. | ||
+ | |||
+ | Например есть стандартная функция позволяющая задать системное меню. Она называется ''hook_menu()''. Если внутри модуля надо что-то сделать с меню, то надо опеределить функцию для этого. Ее имя будет ''modulename_menu()''. Функция будут вызвана автоматически ядром Drupal. Т.е. никаких дополнительных вызовов делать не надо. | ||
+ | === Меню === | ||
+ | Для того чтобы добавить пункт в меню, надо использовать функцию '''hook_menu'''. | ||
+ | Самый простой вариант это использовать следующий код: | ||
+ | <pre> | ||
+ | function modulename_menu() { | ||
+ | $items['modulename'] = array( | ||
+ | 'title' => t('Module'), | ||
+ | 'access callback' => TRUE, | ||
+ | 'page callback' => '_module_function', | ||
+ | ); | ||
+ | return $items; | ||
+ | } | ||
+ | </pre> | ||
+ | Для более сложных вариантов (например добавить пункт в уже существующие меню) нужно добавить следующий код: | ||
+ | <pre> | ||
+ | $items["admin/content/modulename"] = array( | ||
+ | "title" => "Modulename", | ||
+ | "access arguments" => array('administer site configuration'), | ||
+ | "position" => "left", | ||
+ | "page callback" => "_module_block_page", | ||
+ | ); | ||
+ | </pre> | ||
+ | По сути пункты меню также являются некими "обработчиками" ссылок. Эти ссылка являются ключами при добавлении записей в массив '''$items'''. '''page_callback''' определяет функцию, которая будет вызываться при переходе на указаный пункт меню. | ||
+ | |||
+ | Внутри одной функции '''modulename_menu''' Можно добавлять сколько угодно пунктов меню. | ||
+ | |||
+ | После любых изменений в '''hook_menu''' следует обновить кэш системы. Иначе изменения могут не сработать. | ||
[[Категория:Drupal]] | [[Категория:Drupal]] |
Текущая версия
Содержание |
Общая информация
Основная функциональность Drupal выполняется с помощью модулей. Модули бывают системные, или так называемые модули ядра -- core и дополнительные -- core-optional. Распологаться модули могут либо непосредственно в папке modules внутри framework'а либо в папке modules относительно сайтов работающих на данной установке. Имя модуля определяет имя папки внутри которой находятся все необходимые файлы. Так для модуля modulename все файлы будут находиться в папке modules/modulename. К выбору названия модуля следует относится с осторожностью. Это должно быть уникальное (по крайней мере для данной системы) имя и в нем могут быть использованы только символы латиницы и цифры.
В простейшем случае для работы модуля Drupal необходимо два файла:
- modulename.info - файл описания модуля
- modulename.module - файл с кодом модуля
Грабли: без вышеуказанных файлов Drupal даже не определит папку как модуль.
Также могут потребоваться следующие файлы:
- modulename.install - файл установки и инициализации
- ...
Файл описания модуля Drupal
В каждой папке с модулем должен находится файл modulename.info. Этот файл описывает параметры модуля и его взаимодействие с Drupal. Так же там находится информация для администратора сайта на Drupal.
Этот файл имеет следующий формат:
name = modulename description = Description of module. package = Core - optional version = VERSION core = 6.x
Параметры name и description могут содержать произвольный текст и отображаются в списке модулей, который видит администратор сайта.
package задает тим модуля. Либо это системный модуль Drupal (Core), либо это дополнительный модуль (Core - optional)
core определяет версию ядра Drupal с которой может работать данный модуль.
Еще может присутствовать информация о зависимости модулей. Указываются модули от которых зависит создаваемый модуль. Ниже приведена строка указывающая что создаваемый модуль требует для своей работы модуль комментариев.
dependencies[] = comment
Помимо этих строк могут быть строки добавленные системой версий и другая служебная информация.
Установка и инициализация модуля
Функции для установки и деинсталяции модуля указываются в файле modules/modulename/modulename.install.
При отладке возможны грабли. Функция установки может не сработать если до этого не была проведена корректное отключение модуля. В этом случае Drupal клинит и он считает что install вызывать не надо. Лечится удалением соответствующей строки из таблицы system.
Код модуля
Основной код модуля находится в файле modulename.module.
Хуки
Базовая логика модуля строится на использовании функций хуков (hook_). В системе существует ряд системных функций с префиксом hook_. Внутри модуля есть возможность задавать свои функции, которые будут переопределять поведение и работу системы. Переопределение происходит довольно просто - в код модуля добавляется определение и реализации функции, но только у с указанием названия модуля в качестве префикса.
Например есть стандартная функция позволяющая задать системное меню. Она называется hook_menu(). Если внутри модуля надо что-то сделать с меню, то надо опеределить функцию для этого. Ее имя будет modulename_menu(). Функция будут вызвана автоматически ядром Drupal. Т.е. никаких дополнительных вызовов делать не надо.
Меню
Для того чтобы добавить пункт в меню, надо использовать функцию hook_menu. Самый простой вариант это использовать следующий код:
function modulename_menu() { $items['modulename'] = array( 'title' => t('Module'), 'access callback' => TRUE, 'page callback' => '_module_function', ); return $items; }
Для более сложных вариантов (например добавить пункт в уже существующие меню) нужно добавить следующий код:
$items["admin/content/modulename"] = array( "title" => "Modulename", "access arguments" => array('administer site configuration'), "position" => "left", "page callback" => "_module_block_page", );
По сути пункты меню также являются некими "обработчиками" ссылок. Эти ссылка являются ключами при добавлении записей в массив $items. page_callback определяет функцию, которая будет вызываться при переходе на указаный пункт меню.
Внутри одной функции modulename_menu Можно добавлять сколько угодно пунктов меню.
После любых изменений в hook_menu следует обновить кэш системы. Иначе изменения могут не сработать.