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

Презентация:



Advertisements
Похожие презентации
Drupal.= Яндекс.Сервер; DrupalConf. Москва
Advertisements

Overview of the Paysonnel CE. Overview Paysonnel CE Go to URL- 1 Click [Login to Paysonnel CE] 2 How to Log-in to Paysonnel CE 1 2.
S5-1 PAT328, Section 5, September 2004 Copyright 2004 MSC.Software Corporation SECTION 5 RESULTS TITLE EDITOR.
© 2005 Cisco Systems, Inc. All rights reserved. IPTX v Configuring Additional Cisco CallManager Express Features Configuring Cisco CallManager Express.
© 2009 Avaya Inc. All rights reserved.1 Chapter Three, Voic Pro Advanced Functions Module One – Text to Speech.
WiseImage Open Architecture. Why to open? Modern technology demands A growing amount of customers demands for custom commands The limited development.
S11-1PAT301, Section 11, October 2003 SECTION 11 ANALYSIS SETUP.
© 2006 Cisco Systems, Inc. All rights reserved.ISCW v Cisco IOS Threat Defense Features Configuring Cisco IOS IPS.
Эффективное управление содержимым drupal-сайтов Дмитрий Сергеев
© 2005 Cisco Systems, Inc. All rights reserved. BGP v Route Selection Using Policy Controls Applying Route-Maps as BGP Filters.
WS16-1 WORKSHOP 16 MODAL FREQUENCY ANALYSIS OF A CAR CHASSIS NAS122, Workshop 16, August 2005 Copyright 2005 MSC.Software Corporation.
© 2006 Cisco Systems, Inc. All rights reserved. CIPT1 v Administration of Cisco Unified CallManager Release 5.0 Performing General Administration.
PAT312, Section 18, December 2006 S18-1 Copyright 2007 MSC.Software Corporation SECTION 18 LOADS & BOUNDARY CONDITIONS.
Основы реляционных баз данных Лекция 6. Введение в SQL Желенкова Ольга Петровна, с.н.с. ОИ САО РАН, к.ф.-м.н апреля 2008.
Copyright ® 2000 MSC.Software Results S17-1 PAT301, Section 17, October 2003 SECTION 17 FILE MANAGEMENT.
S11-1 PAT318, Section 11, March 2005 SECTION 11 ANALYSIS SETUP.
Workshop 7B-1 NAS101 Workshops Copyright 2001 MSC.Software Corporation WORKSHOP 7B Structure With Spring Support.
LOGO ThemeGallery PowerTemplate Your company slogan in here.
Using Dreamweaver MX Slide 1 Window menu Manage Sites… Window menu Manage Sites… 2 2 Open Dreamweaver 1 1 Set up a website folder (1). Click New…
Что удобнее использовать - стандартный тип материала product или свой собственный? Product 1. Работает со стандартным каталогом уберкарта. 2. Позволяет.
Транксрипт:

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

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

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

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

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

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

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

Примеры кода

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

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

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

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

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

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

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

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

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

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

Создание/Изменение/Удаление пользователя $user = array( 'name' => Логин, 'pass' => Пароль, 'mail' => , 'status' => 1, ); user_save('', $user, 'account'); // Изменение пользователя: $user = user_load(ID пользователя); $edit = array( 'status' => 1, ); user_save($user, $edit); // Удаление пользователя: user_delete(ID пользователя);

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

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

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

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

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

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