Ранее уже писал как управлять своими данными в Drupal 6. В этом посте покажу как сделать тоже самое в Drupal 7, но с применением модуля Entity API, который упрощает создание и администрирование своих сущностей.
Для примера создадим сущность Альбом (album) и административную страницу, на которой можно будет создать/отредактировать/удалить альбомы.
1. В .install файле модуля описываем таблицу, в которой будет храниться информация об альбомах:
/**
* Реализация hook_schema()
*/
function album_schema() {
$schema['albums'] = array(
'fields' => array(
'aid' => array(
'description' => 'Album ID',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'title' => array(
'description' => 'Album title',
'type' => 'varchar',
'length' => 100,
'not null' => TRUE,
),
'year' => array(
'description' => 'Album year',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
),
'primary key' => array('aid'),
);
return $schema;
}
2. В хуке hook_entity_info() описываем сущность Альбом:
/**
* Реализация hook_entity_info()
*/
function album_entity_info() {
return array(
'album' => array( // Системное имя сущности
'label' => t('Album'), // Человеко-понятное имя сущности
'entity class' => 'Entity', // Класс сущности
'controller class' => 'EntityAPIController', // Контроллер сущности
'base table' => 'albums', // Таблица, в которой хранится информация об альбомах
'entity keys' => array(
'id' => 'aid', // Название поля, в котором распологаются идентификаторы альбомов
'label' => 'title' // Название поля, в котором распологаются названия альбомов
),
'admin ui' => array(
'path' => 'admin/structure/albums' // Путь, по которому будет доступна админка
),
'access callback' => 'album_access', // Имя функции, отвечающей за проверку прав доступа
'module' => 'album',
),
);
}
Благодаря тому, что мы указали entity class и controller class, модуль Entity API автоматически создаст для нашей сущности функции entity_create(), entity_save(), entity_delete(), entity_view() и entity_access().
3. Создаём функции album_access() и album_load() (это нужно для работы административной страницы):
/**
* Проверка прав доступа
*/
function album_access($op, $entity, $account = NULL, $entity_type = 'album') {
return user_access('administer site configuration'); // сущность будет доступна только администратору сайта
}
/**
* Возвращает альбом по его идентификатору
*/
function album_load($aid) {
$result = entity_load('album', array($aid));
return $result ? reset($result) : FALSE;
}
4. Описываем форму создания/редактирования сущности:
/**
* Форма создания/редактирования альбома
*/
function album_form($form, &$form_state, $album, $op = 'edit') {
$form['title'] = array(
'#title' => 'Название',
'#description' => 'Название альбома',
'#type' => 'textfield',
'#default_value' => isset($album->title) ? $album->title : '',
'#required' => true,
);
$form['year'] = array(
'#title' => 'Год',
'#description' => 'Год выхода альбома',
'#type' => 'textfield',
'#default_value' => isset($album->year) ? $album->year : '',
'#required' => true,
'#size' => 5,
);
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => 'Сохранить',
);
return $form;
}
5. Добавляем каллбак для описанной выше формы:
/**
* Сохранение информации об альбоме
*/
function album_form_submit(&$form, &$form_state) {
$album = entity_ui_form_submit_build_entity($form, $form_state);
$album->save();
$form_state['redirect'] = 'admin/structure/albums';
}
Вот и всё.