1 / 25

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

Drupal 7 Deploy (делаем Deploy нового функционала проще). Anton Ivanov. Почему возникают проблемы. Настройки сайта производимые через WEB интерфейс не логгируются. Ни один из существующих модулей/утилит не позволяет переносить все изменения. Обзор существующих решений. Features.

durin
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Почему возникают проблемы • Настройки сайта производимые через WEB интерфейс не логгируются. • Ни один из существующих модулей/утилит не позволяет переносить все изменения.

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

  4. Features • Переносит:Content types, Fields, Image styles, Menu, Permissions, Roles, Text formats, Variables, Nodes, Users, Taxonomy, Blocks, Nodequeue. • Преимущества: Функциональность, Модули расширяющие функционал. • Недостатки: Не универсальное решение, Монструозен, Нагрузка на сайт.

  5. Patterns • Переносит:Content Types, Views, Image styles, Menu, Blocks, Content, Users, Profiles, Taxonomy, Pathauto, System settings, Permissions / Roles, Variables. • Преимущества: Функциональность, Проста освоения. • Недостатки: Не универсальное решение, ALPHA версия, Не генерирует YML.

  6. Deployment • Переносит:Views и Контент со всеми зависимостями (references (term, node), taxonomy vocabularies, terms). • Преимущества: Функциональность, Проста освоения, Самостоятельность. • Недостатки: Не универсальное решение, DEV версия.

  7. Предлагаемый подход Все что можно сделать через WEB интерфейс - можно сделать программно в hook_enable() либо hook_update(). • Преимущества: Ускорение и Автоматизация Deploy. • Недостатки: +Затраты времени, Не применим при массовом импорте.

  8. Примеры кода

  9. Создание/Изменение/Удаление типа нод • Первый способ: • Implement • hook_node_info() • hook_form() • hook_insert() • hook_update() • hook_load() • hook_delete() • hook_view()

  10. Создание/Изменение/Удаление типа нод • Второй способ: $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(“Машинное имя”).

  11. Создание/Изменение/Удаление нод $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 ноды”).

  12. Создание полей $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);

  13. Изменение/Удаление полей // Изменение уже существующего поля:$instance = field_read_instance(“Тип энтити”, “Машинное имя поля”, “Бандл”);// Производим модификацию объекта поля.field_update_instance($instance); // Удаление связи поля с энтити:field_delete_instance(“Объект поля”, “Удалять или нет само поле”).//Удаление поля:field_delete_field(“Машинное имя поля”).

  14. Создание/Изменение/Удаление словаря таксономии $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 словаря”).

  15. Создание/Изменение/Удаление термина таксономии $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 термина”)

  16. Создание/Изменение 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” или ”Вернуть”.

  17. Создание/Изменение 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”).

  18. Включение/Выключение/Удаление модуля • module_exists() • module_enable() • module_disable() • drupal_uninstall_modules()

  19. Создание/Изменение/Удаление пользователя $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 пользователя”);

  20. Создание/Изменение/Удаление роли $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'));

  21. Создание/Изменение/Удаление меню menu_save(array('menu_name' => “Машинное имя меню”,'title' => “Название меню”,'description' => “Описание меню”,));// Изменение меню:$menu = menu_load(“Машинное имя меню”);// Производим модификацию Меню.menu_save($menu);// Удаление меню:$menu = menu_load(“Машинное имя меню”);menu_delete($menu);

  22. Создание/Изменение/Удалениепункта меню $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 пункта меню”);

  23. Создание/Изменение блоков • 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)

  24. Процесс Deploy • Создание бэкапа базы • Обновление файлов проекта • Запуск “Update” При массовом импорте: • Импорт контента с использованием существующих модулей

  25. Спасибо за внимание • Skype: antonnavi • Email: anton.ivanov@wdg.com.ua

More Related