drupal 7 deploy database updates

25
Drupal 7 Deploy (делаем Deploy нового функционала проще) Anton Ivanov

Upload: anton-ivanov

Post on 26-Jan-2017

167 views

Category:

Education


5 download

TRANSCRIPT

Page 1: Drupal 7 deploy database updates

Drupal 7 Deploy(делаем Deploy нового функционала проще)

Anton Ivanov

Page 2: Drupal 7 deploy database updates

Почему возникают проблемы

Настройки сайта производимые через WEB интерфейс не логгируются.

Ни один из существующих модулей/утилит не позволяет переносить все изменения.

Page 3: Drupal 7 deploy database updates

Обзор существующих решений

Page 4: Drupal 7 deploy database updates

Features

Переносит: Content types, Fields, Image styles, Menu, Permissions, Roles, Text formats, Variables, Nodes, Users, Taxonomy, Blocks, Nodequeue.

Преимущества: Функциональность, Модули расширяющие функционал.

Недостатки: Не универсальное решение, Монструозен, Нагрузка на сайт.

Page 5: Drupal 7 deploy database updates

Patterns

Переносит: Content Types, Views, Image styles, Menu, Blocks, Content, Users, Profiles, Taxonomy, Pathauto, System settings, Permissions / Roles, Variables.

Преимущества: Функциональность, Проста освоения.

Недостатки: Не универсальное решение, BETA версия, Генерирует не все YML.

Page 6: Drupal 7 deploy database updates

Deployment

Переносит: Views и Контент со всеми зависимостями (references (term, node), taxonomy vocabularies, terms).

Преимущества: Функциональность, Проста освоения, Самостоятельность.

Недостатки: Не универсальное решение, DEV версия.

Page 7: Drupal 7 deploy database updates

Предлагаемый подход

Все что можно сделать через WEB интерфейс - можно сделать программно в hook_enable() либо hook_update().

Преимущества: Ускорение и Автоматизация Deploy.

Недостатки: +Затраты времени, Не применим при массовом импорте.

Page 8: Drupal 7 deploy database updates

Примеры кода

Page 9: Drupal 7 deploy database updates

Создание/Изменение/Удаление типа нод

Первый способ: Implement

hook_node_info() hook_form() hook_insert() hook_update() hook_load() hook_delete() hook_view()

Page 10: Drupal 7 deploy database updates

Создание/Изменение/Удаление типа нод

Второй способ: $type = node_type_set_defaults(); // node_type_load(“Машинное имя”).

$type->type = “Машинное имя типа нод”;$type->name = “Имя типа нод”;$type->description = “Описание типа нод”;$type->help = “Пояснения”;$type->title_label = “Название поля заголовка”;$type->has_title = ($type->title_label != '');$type->modified = TRUE;$type->custom = 1;$type->locked = 0 или 1;$type->base = 'node_content';$type->module = ‘’;

node_type_save($type);node_types_rebuild();menu_rebuild();

Удаление типа нод: node_type_delete(“Машинное имя”).

Page 11: Drupal 7 deploy database updates

Создание/Изменение/Удаление нод

$node = new stdClass(); // Или node_load(“ID ноды”)$node->title = “Тайтл ноды”;$node->type = “Машинное имя типа ноды”;$node->language = “Язык ноды”;$node->uid = “UID владельца ноды”;$node->status = NODE_PUBLISHED или NODE_NOT_PUBLISHED;$node->comment = COMMENT_NODE_OPEN или COMMENT_NODE_CLOSED;

$node->field_mashine_name[$node->language][0]['tid|value'] = “Значение”;…// Эти поля используются для редактирования существующей ноды.$node->nid = “ID ноды”;$node->vid = “ID версии”;

node_save($node);

// Удаление ноды:node_delete(“ID ноды”).

Page 12: Drupal 7 deploy database updates

Создание полей $field = array(

'field_name' => “Машинное имя поля”, 'cardinality' => 1, 'translatable' => TRUE или FALSE, 'type' => 'text',);field_create_field($field);

$instance = array( 'field_name' => “Машинное имя поля”, 'entity_type' => 'node', 'label' => “Лейбл поля”, 'bundle' => “В данном случае тип нод”, 'required' => TRUE или FALSE, 'widget' => array( 'type' => 'text_textfield', ), 'display' => array( 'default' => array( 'type' => 'text_default', ), ),);field_create_instance($instance);

Page 13: Drupal 7 deploy database updates

Изменение/Удаление полей

// Изменение уже существующего поля:$instance = field_read_instance(“Тип энтити”, “Машинное имя поля”, “Бандл”);

// Производим модификацию объекта поля.field_update_instance($instance);

// Удаление связи поля с энтити:field_delete_instance(“Объект поля”, “Удалять или нет само поле”).

//Удаление поля:field_delete_field(“Машинное имя поля”).

Page 14: Drupal 7 deploy database updates

Создание/Изменение/Удаление словаря таксономии

$v = (object) array( 'name' => “Имя словаря”, 'machine_name' => “Машинное имя словаря”, 'description' => “Описание словаря”,);taxonomy_vocabulary_save($v);

// Обновление словаря:$v = taxonomy_vocabulary_machine_name_load(“Машинное имя словаря”);// Или:$v = taxonomy_vocabulary_load(“ID словаря”);

// Производим модификацию объекта словаря.taxonomy_vocabulary_save($v);

// Удаление словаря:taxonomy_vocabulary_delete(“ID словаря”).

Page 15: Drupal 7 deploy database updates

Создание/Изменение/Удаление термина таксономии

$term = (object) array( 'vid' => “ID словаря”, 'name' => “Имя термина”, 'parent' => “ID родительского термина”, // Если родителя нет пишем 0. 'description' => “Описание термина”,);taxonomy_term_save($term);

// Обновление термина:$term = taxonomy_term_load(“ID термина”);

// Производим модификацию объекта термина.taxonomy_term_save($term);

// Удаление термина:taxonomy_term_delete(“ID термина”)

Page 16: Drupal 7 deploy database updates

Создание/Изменение Views

С начала создаем вьюшку с помощью интерфейса Views Новый или существующий модуль + hook_views_api() Создаем файл MODULE_NAME.views_default.inc hook_views_default_views() в

MODULE_NAME.views_default.inc Экспортируем созданый views в

hook_views_default_views() Удаляем созданный views и сбрасываем кеш.

Изменяем views, сохраняем и экспортируем в hook_views_default_views()

Нажимаем ”Revert” или ”Вернуть”.

Page 17: Drupal 7 deploy database updates

Создание/Изменение Image Style

hook_image_default_styles() Второй способ: $style = image_style_save(

array( 'name' => “Название Image Style”, ));

$effect = image_effect_definition_load(“Машинное имя эффекта”);$effect['isid'] = $style['isid'];$effect['weight'] = 1;$effect['data'] = array( 'width' => 150, 'height' => 250, 'anchor' => 'center-center',);image_effect_save($effect);

Удаление: image_effect_delete(“Массив эффекта”), image_style_delete(“Image Style”).

Page 18: Drupal 7 deploy database updates

Включение/Выключение/Удаление модуля

module_exists() module_enable() module_disable() drupal_uninstall_modules()

Page 19: Drupal 7 deploy database updates

Создание/Изменение/Удаление пользователя

$user = array( 'name' => “Логин”, 'pass' => “Пароль”, 'mail' => “Email”, 'status' => 1,);user_save('', $user, 'account');

// Изменение пользователя:$user = user_load(“ID пользователя”);$edit = array( 'status' => 1,);user_save($user, $edit);

// Удаление пользователя:user_delete(“ID пользователя”);

Page 20: Drupal 7 deploy database updates

Создание/Изменение/Удаление роли

$role = (object) array( ‘name’ => “Название роли”,);user_role_save($role);

// Изменение роли:$role = user_role_load(“ID роли”);// Производим модификацию объекта роли.user_role_save($role);

Удаление роли: user_role_delete(“Объект роли”).

// Модификация прав роли:user_role_change_permissions( 2, array( 'administer nodes' => 0, // Revoke 'administer nodes' 'administer blocks' => FALSE, // Revoke 'administer blocks' 'access user profiles' => 1, // Grant 'access user profiles' 'access content' => TRUE, // Grant 'access content' ));

Page 21: Drupal 7 deploy database updates

Создание/Изменение/Удаление меню

menu_save(array( 'menu_name' => “Машинное имя меню”, 'title' => “Название меню”, 'description' => “Описание меню”,));

// Изменение меню:$menu = menu_load(“Машинное имя меню”);

// Производим модификацию Меню.menu_save($menu);

// Удаление меню:$menu = menu_load(“Машинное имя меню”);menu_delete($menu);

Page 22: Drupal 7 deploy database updates

Создание/Изменение/Удалениепункта меню

$link = array( 'link_title' => “Текст ссылки”, 'link_path' => “Путь ссылки”, 'description' => “Описание”, 'enabled' => 1, 'menu_name' => “Машинное имя меню”, 'plid' => 0 // ID родительской ссылки. 'weight' => 1,);menu_link_save($link);

// Изменение пункта меню:$link = menu_link_load(“ID пункта меню”);

// Производим модификацию Пункта меню.menu_link_save($link);

// Удаление пункта меню:menu_link_delete(“ID пункта меню”);

Page 23: Drupal 7 deploy database updates

Создание/Изменение блоков

Implement hook_block_info() hook_block_configure() hook_block_save() hook_block_view()

Второй способ: block_add_block_form_submit(NULL, $form_state) block_admin_configure_submit(NULL, $form_state) block_custom_block_delete_submit(NULL, $form_state)

Page 24: Drupal 7 deploy database updates

Процесс Deploy

Создание бэкапа базы Обновление файлов проекта Запуск “Update”

При массовом импорте: Импорт контента с использованием

существующих модулей

Page 25: Drupal 7 deploy database updates

Спасибо за внимание

Skype: antonnaviEmail: [email protected]