Drupal 6.x. Создание модуля – файл .install
Файл с расширением .install (mymodule.install, где mymodule – имя Вашего модуля) запускается в первый раз после того, как Вы включаете соответствующий модуль в админке, этот файл запускает необходимые процедуры по установке, которые могут быть необходимы Вашему модулю. В большинстве случаев для установки модуля обычно нужно создать таблицы и поля в БД, с которыми будет впоследствии оперировать данный модуль. Для файла с расширением .install не нужен какой-либо специальный синтаксис – это такой же PHP файл, как и, например, файл с расширением .module.
Файл .install нужен также для того, чтобы выполнить обновление модуля, когда подключается его новая версия.
Необходимые инструкции по установке вложены в функцию _install() (эта функция объявляется в файле .install). Функция имеет имя mymodule_install(), где mymodule - имя Вашего модуля. Этот хук вызывается Друпалом при первом включении модуля. Обычно эта функция (хук) применяется для того, чтобы создать таблицу в БД для нового модуля.
В Друпале 6.x для создания таблиц и полей в БД применяется Schema API. Schema API позволяет модулям объявлять свои таблицы БД в структурированном массиве (подобно Form API) и обеспечивает функции API для создания, удаления и изменения таблиц, столбцов, строк, ключей и индексов БД.
Я хочу разобрать пример из документации по Schema API с сайта Drupal.org.
Например, как создаётся таблица БД для самой обычной ноды (модуль Node ядра Друпала, обязательный модуль, с помощью которого добавляются и загружаются ноды). Это отрывок из файла node.install, из функции node_schema().
<?php
$schema['node'] = array(
'description' => t('The base table for nodes.'),
'fields' => array( // Таблица содержит четыре поля (колонки) - <em>'nid', 'vid', 'type' и 'title'
'nid' => array( <strong>// Первое поле
'description' => t('The primary identifier for a node.'), // Описание поля
'type' => 'serial', // Тип первого поля - 'serial'
'unsigned' => TRUE,
'not null' => TRUE), // Конец первого поля</strong>
'vid' => array( // Второе поле
'description' => t('The current {node_revisions}.vid version identifier.'),// Описание поля
'type' => 'int', // Тип второго поля - 'int'
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0), // Конец второго поля
'type' => array( // Третье поле
'description' => t('The {node_type} of this node.'), // Описание поля
'type' => 'varchar', // Тип третьего поля - 'varchar'
'length' => 32,
'not null' => TRUE,
'default' => ''), // Конец третьего поля
'title' => array( // Четвёртое поле
'description' => t('The title of this node, always treated a non-markup plain text.'), // Описание поля
'type' => 'varchar', // Тип четвёртого поля - 'varchar'
'length' => 255,
'not null' => TRUE,
'default' => ''), // Конец четвёртого поля
), // Конец перечисления полей
'indexes' => array( // Два индекса таблицы 'node_changed' и 'node_created'
'node_changed'=> array('changed'), // Поле 'changed' - для изменённых нод
'node_created'=> array('created'), // Поле 'created' - для созданных нод
),
'unique keys'=> array( // Вторичный ключ таблицы
'vid'=> array('vid') // Ключ 'vid' - поле 'vid'
),
'primary key'=> array('nid'), // Первичный ключ таблицы - поле 'nid'
);
?>
<?php
$schema['node'] = array(
'description' => t('The base table for nodes.'),
'fields' => array( // Таблица содержит четыре поля (колонки) - <em>'nid', 'vid', 'type' и 'title'
'nid' => array( <strong>// Первое поле
'description' => t('The primary identifier for a node.'), // Описание поля
'type' => 'serial', // Тип первого поля - 'serial'
'unsigned' => TRUE,
'not null' => TRUE), // Конец первого поля</strong>
'vid' => array( // Второе поле
'description' => t('The current {node_revisions}.vid version identifier.'),// Описание поля
'type' => 'int', // Тип второго поля - 'int'
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0), // Конец второго поля
'type' => array( // Третье поле
'description' => t('The {node_type} of this node.'), // Описание поля
'type' => 'varchar', // Тип третьего поля - 'varchar'
'length' => 32,
'not null' => TRUE,
'default' => ''), // Конец третьего поля
'title' => array( // Четвёртое поле
'description' => t('The title of this node, always treated a non-markup plain text.'), // Описание поля
'type' => 'varchar', // Тип четвёртого поля - 'varchar'
'length' => 255,
'not null' => TRUE,
'default' => ''), // Конец четвёртого поля
), // Конец перечисления полей
'indexes' => array( // Два индекса таблицы 'node_changed' и 'node_created'
'node_changed'=> array('changed'), // Поле 'changed' - для изменённых нод
'node_created'=> array('created'), // Поле 'created' - для созданных нод
),
'unique keys'=> array( // Вторичный ключ таблицы
'vid'=> array('vid') // Ключ 'vid' - поле 'vid'
),
'primary key'=> array('nid'), // Первичный ключ таблицы - поле 'nid'
);
?>Как видите, таблица содержит четыре поля - для каждого поля есть тип ('type'), описание ('description'), а также другие настраиваемые параметры, пока не буду на них углубляться - сейчас важнее понять общую структуру.
Продолжение в следующих постах. Оригинал статьи.
Спасибо за внимание.
Ёж


