Создание простейшего модуля управления данными с помощью Entity API

Ранее уже писал как управлять своими данными в 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';
}

Вот и всё.
Теги:
работа с бд, работа с сущностями, работа с формами, создание модуля
Добавлено: 29 Июля 2018 20:25:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...