SlideShare une entreprise Scribd logo
1  sur  66
Télécharger pour lire hors ligne
Делаем дистрибутивы
Почему, Зачем и Как?

Алексей Горобец
asgorobets
Обо мне
* Senior Drupal Developer @ Propeople
* 2 года в Drupal
* Трейнер
* Комьюнити лидер
O Propeople

http://wearepropeople.com
O Propeople
В зале у нас?
* Разработчики
В зале у нас?
* Разработчики
* Сайт-билдеры
В зале у нас?
* Разработчики
* Сайт-билдеры
* Front-end разработчики
В зале у нас?
* Разработчики
* Сайт-билдеры
* Front-end разработчики
* Менеджеры проектов
На повестке дня
1. Что такое дистрибутив и зачем они
нужны?
2. В каких случаях стоит создавать свой
дистрибутив?
3. Как создать и поддерживать свой
дистрибутив
Немного фактов

По данным http://w3techs.com/
Немного фактов

По данным http://w3techs.com/
Чего же не хватает в Drupal?
* Листинг контента?
* WYSIWYG?
* Удобный интерфейс?
* Менеджемент медиа?
* Поле типа Date и Link?
Два типа пользователей

Все есть, только
надо настроить. Вот
тебе туториалы,
смотри как все
просто!

К черту ваш Drupal.
Неюзабельный и
сложный он!
Что такое дистрибутив?
Что такое дистрибутив?
Дистрибутивы предоставляют
упакованную версию ядра
Drupal с контриб модулями
предварительно настроенными
под определенный тип сайта.
Ядро Drupal и contrib
Drupal distribution
Популярные дистрибутивы
Commerce Kickstart
OpenPublish
OpenPublic
Drupal Commons
Open Atrium
COD
Почему дистрибутивы
существуют?
Не изобретай колесо!
Почему дистрибутивы
существуют?
Наши услуги не всем по корману
Distribution vs Install Profile
Так вы хотите разработать
дистрибутив?
А стоит ли?
So You Guys Want to Build a Drupal Distribution
http://www.youtube.com/watch?v=ECrUuRGzuH0
http://prezi.com/k2d_x8eczfzu/so-you-want-to-build-a-drupal-distro/
Так вы хотите разработать
дистрибутив?
Может вам нужен Install Profile?
Distribution:

Install Profile:

* Брендированный продукт
* Решает определенный
юзкейс
* Является публичным
проектом и поддерживается
сообществом
* Фокус на конечного
пользователя (готов к
использованию)

* Предустанавливает модули
* Создает конфигурации
* Для внутреннего
использования
* Фокус на разработчика
(готов к началу разработки)
Или build base?

* У вас Continuous Integration?
* Распределенная команда разработчиков?
* Нужна стандартизация?
* Нужно автоматическое тестирование?
* Надоело повторяться?
С чего начать?
Install Profile
myprofile.info
myprofile.profile
myprofile.install
Install Profile
myprofile.info
name = My Profile
description = Description of what the profile does.
core = 7.x
dependencies[] = block
dependencies[] = color
dependencies[] = comment
dependencies[] = contextual
dependencies[] = dashboard
dependencies[] = help
dependencies[] = image
dependencies[] = list
dependencies[] = menu
dependencies[] = number
dependencies[] = options
Install Profile
myprofile.profile
То же что и .module для модулей. Здесь удобно
определять hook_install_tasks и подобные вещи
связанные с процессом инсталяции.
Install Profile
Install Profile
myprofile.install
<?php
/**
* Implement hook_install().
*
* Perform actions to set up the site for this profile.
*/
function profilename_install() {
include_once DRUPAL_ROOT . '/profiles/minimal/minimal.install';
minimal_install();
}
?>
Основные инструменты
Features
Features
Features
FAQ и подводные камни
* Как правильно упаковывать компоненты?
Не создавайте фичи по принципу общего типа
компонента. Гиганты вроде Acme Content Types,
или Acme Views зделают вашу систему сильнозависимой, их нельзя будет отключить, а
реорганизация покажется адом.
Организовывайте фичи по принципу независимого
функционала.
Например:
Blog, Gallery, Voting
FAQ и подводные камни
* Как организовать фичи для реутилизации
полей
Нет необходимости дублировать поля общего
назначения. Создавайте общие поля указывая их
характеристики в имени поля.
Например:
field_file_single_public
Поле типа файл, принимающее единственное
значение, использует Public директорию.
field_link_single, field_content_ref,
field_body_no_summary
FAQ и подводные камни
* Как избежать конфликтов с base fields
Все field_base полезно экспортировать в отдельную
фичу, а уже field_instance в фичу с контент тайпом.
Например:
Acme Base Fields - field_base:field_body
Acme Blog - field_instance:field_body
Acme Article - field_instance:field_body
FAQ и подводные камни
* Как экспортить мои File Display в фичу если они
определяются в hook_default_COMPONENT?
Любую фичу можно переиспользовать экспортирую
только необходимые изменения с помошью
Features Override
FAQ и подводные камни
* Как экспортить variables
Не волнуемся, на помошь приходит модуль
Strongarm
Основные инструменты
Features

Drush make
Простой Drush make
api = 2
; Core project
projects[drupal][version] = 7

; Modules
; -------projects[ctools][version] = 1.3
projects[ctools][type] = "module"
projects[libraries][version] = 2.1
projects[libraries][type] = "module"
projects[wysiwyg][version] = 2.2
projects[wysiwyg][type] = "module"
projects[views][version] = 3.7
projects[views][type] = "module"
Drush make для дистрибутива
Stub make
Подтягивает ядро Drupal и сам install profile.
Здесь есть одно преимущество - удобно подтягивать
несколько install profiles в вашем дистрибутиве.
Profile make
Подтягивает модули, темы, библиотеки, применяет
патчи
Stub make
distro.make
api = 2
core = 7.x

projects[drupal][type] = core
projects[drupal][version] = "7.23"
; This fixes multiple upload fields in gsb_media_center. http://drupal.org/node/1620030
projects[drupal][patch][1620030] = http://drupal.org/files/1620030-d7-2.patch
projects[drupal][patch][1702132] = http://drupal.org/files/drupal-7.14-ajax-showeffect-not-function1702132.patch
projects[drupal][patch][1783278] = https://drupal.org/files/schema-relative-1783278-7-D7-do-nottest.patch
projects[drupal][patch][1232416] = https://drupal.org/files/issues/autocomplete-1232416-17-7x.patch
; Add GSB Public Profile
projects[gsb_public][type] = profile
projects[gsb_public][download][type] = git
projects[gsb_public][download][url] = https://github.com/gsbitse/gsb_public.git
projects[gsb_public][download][branch] = 1.4
Profile make
profile.make
api = 2
core = 7.x
; Feature Flag
projects[feature_flag][type] = module
projects[feature_flag][download][type] = git
projects[feature_flag][download][url] = git@github.com:gsbitse/feature_flag.git
projects[feature_flag][download][tag] = 1.0
projects[feature_flag][subdir] = custom
; GSB Acquia Tokens
projects[gsb_acquia_tokens][type] = module
projects[gsb_acquia_tokens][download][type] = git
projects[gsb_acquia_tokens][download][url] = git@github.com:gsbitse/gsb_acquia_tokens.git
projects[gsb_acquia_tokens][download][tag] = 1.0
projects[gsb_acquia_tokens][subdir] = custom
etc...
Основные инструменты
Features

Drush make

Хуки
Обновления с hook_update_N()
/**
* Add a 'year' date format.
*/
function myprofile_update_7000() {
// Insert custom format: 2011
db_insert('date_formats')
->fields(array('format' => 'Y', 'type' => 'custom', 'locked' => 0))
->execute();
// Insert custom format: 2011
db_insert('date_format_type')
->fields(array('type' => 'year', 'title' => 'Year', 'locked' => 0))
->execute();
// Date Year Format
variable_set('date_format_year', 'Y');
}
Обновления с hook_update_N()
* Все обновления из hook_update_N также идут в
hook_install!
* Новые модули активируем в:
- dependencies (для первой инсталяции)
- hook_update_N при помощи module_enable
Билдим дистрибутив

drush make distro.make
Билдим дистрибутив

drush make distro.make

Drush make рекурсивно вызывает .make файлы из подтягиваемых
проектов! Таким образом запустив distro.make подтянются все
модули из profile.make и так далее.
Свой дистрибутив (варианты)
1. Начать с нуля
2. Использовать base distribution
3. Унаследовать дистрибутив
Подход “с нуля”
Преимущества
* Включай только то что нужно (гибкость)
Недостатки
* Изобретение велосипеда. Придется все
настраивать самим и экспортить в фичи, которые
потом поддерживать
* Дорого поддерживать контриб модули и следить
за их обновлениями
Подход “с базовой дистро”
Преимущества
* Готовые фичи из коробки
* Поддержка базовой дистрибутив сообществом
Недостатки
* Не все фичи нужны, что-то придется отключать, а
что-то переписыватьi
* Big Drupal, больше модулей, больше шансов что
всплывет баг
Представляем Panopoly
Дистро на базе Panopoly
Включить в profile.make фичи Panopoly:
projects[panopoly_core][version] = 1.0-rc5
projects[panopoly_core][subdir] = panopoly
projects[panopoly_core][patch][2087414] = https://drupal.org/files/issue-2087414.patch
projects[panopoly_images][version] = 1.0-rc5
projects[panopoly_images][subdir] = panopoly
projects[panopoly_theme][version] = 1.0-rc5
projects[panopoly_theme][subdir] = panopoly
projects[panopoly_magic][version] = 1.0-rc5
projects[panopoly_magic][subdir] = panopoly
projects[panopoly_widgets][version] = 1.0-rc5
projects[panopoly_widgets][subdir] = panopoly
projects[panopoly_admin][version] = 1.0-rc5
projects[panopoly_admin][subdir] = panopoly
projects[panopoly_users][version] = 1.0-rc5
projects[panopoly_users][subdir] = panopoly
; The Panopoly Toolset
projects[panopoly_pages][version] = 1.0-rc5
projects[panopoly_pages][subdir] = panopoly
projects[panopoly_wysiwyg][version] = 1.0-rc5
projects[panopoly_wysiwyg][subdir] = panopoly
projects[panopoly_search][version] = 1.0-rc5
projects[panopoly_search][subdir] = panopoly
Яркий пример

Попробуйте собрать свой GSB отсюда
Подход “наследование”
Преимущества
* Сканирует базовый инстал профайл на модули и
темы
* Возможность переписать родительский модуль
поместив этот же модуль в дочерний профайл
Недостатки
* Патчим ядро
* Пока никак нельзя унаследовать инсталл таски
родителя
Подход “наследование”
1. Ставим патч
Make install profiles inheritable
2. Указываем родителя в .info
base = BASE_PROFILE
3. Подробнее читаем
Inheriting your Drupal profile from an existing
distribution
К дальнейшему изучению?
* DrupalCon London 2011: BUILDING AND MAINTAINING A
DISTRIBUTION IN DRUPAL 7
* Kit specification
* Drush make
* Apps
Учимся по примеру:
https://github.com/Gizra/Garment-Box
https://github.com/gsbitse/gsb-distro

а также проекты на drupal.org
Demo
Q&A
Создание дистрибутивов Drupal. Почему, зачем и как?

Contenu connexe

Tendances

Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Глеб Тарасов
 
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И... Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...Тарасов Константин
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаprivate_face
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Ontico
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPressDarja Kruzhkova
 
работа с блогом1
работа с блогом1работа с блогом1
работа с блогом1Natalia Odegova
 
Opensource на .NET
Opensource на .NETOpensource на .NET
Opensource на .NETlugnsk
 
История развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеИстория развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеlugnsk
 
"Добро пожаловать в SoundCloud!". Александр Ковалёв, SoundCloud
"Добро пожаловать в SoundCloud!". Александр Ковалёв, SoundCloud"Добро пожаловать в SoundCloud!". Александр Ковалёв, SoundCloud
"Добро пожаловать в SoundCloud!". Александр Ковалёв, SoundCloudYandex
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.DrupalForumZP2012
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Vladimir Malyk
 
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014Dmytro Zharii
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейKonstantin Komelin
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановMoscowJS
 
Пишем БЭМ правильно
Пишем БЭМ правильноПишем БЭМ правильно
Пишем БЭМ правильноIhor Zenich
 

Tendances (17)

Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
 
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И... Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кода
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPress
 
работа с блогом1
работа с блогом1работа с блогом1
работа с блогом1
 
Opensource на .NET
Opensource на .NETOpensource на .NET
Opensource на .NET
 
История развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеИстория развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другие
 
Videoblog
VideoblogVideoblog
Videoblog
 
"Добро пожаловать в SoundCloud!". Александр Ковалёв, SoundCloud
"Добро пожаловать в SoundCloud!". Александр Ковалёв, SoundCloud"Добро пожаловать в SoundCloud!". Александр Ковалёв, SoundCloud
"Добро пожаловать в SoundCloud!". Александр Ковалёв, SoundCloud
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
 
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
Пишем БЭМ правильно
Пишем БЭМ правильноПишем БЭМ правильно
Пишем БЭМ правильно
 

En vedette

Media management in Drupal @Moldcamp
Media management in Drupal @MoldcampMedia management in Drupal @Moldcamp
Media management in Drupal @MoldcampAlexei Gorobets
 
Dependency injection in Drupal 8
Dependency injection in Drupal 8Dependency injection in Drupal 8
Dependency injection in Drupal 8Alexei Gorobets
 
Extending media presentation
Extending media presentationExtending media presentation
Extending media presentationAlexei Gorobets
 
Real-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @MoldcampReal-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @MoldcampAlexei Gorobets
 
Real-time search in Drupal. Meet Elasticsearch
Real-time search in Drupal. Meet ElasticsearchReal-time search in Drupal. Meet Elasticsearch
Real-time search in Drupal. Meet ElasticsearchAlexei Gorobets
 

En vedette (7)

Media management in Drupal @Moldcamp
Media management in Drupal @MoldcampMedia management in Drupal @Moldcamp
Media management in Drupal @Moldcamp
 
Dependency injection in Drupal 8
Dependency injection in Drupal 8Dependency injection in Drupal 8
Dependency injection in Drupal 8
 
Why drupal
Why drupalWhy drupal
Why drupal
 
Extending media presentation
Extending media presentationExtending media presentation
Extending media presentation
 
Real-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @MoldcampReal-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @Moldcamp
 
Real-time search in Drupal. Meet Elasticsearch
Real-time search in Drupal. Meet ElasticsearchReal-time search in Drupal. Meet Elasticsearch
Real-time search in Drupal. Meet Elasticsearch
 
Migrate in Drupal 8
Migrate in Drupal 8Migrate in Drupal 8
Migrate in Drupal 8
 

Similaire à Создание дистрибутивов Drupal. Почему, зачем и как?

Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияOvadiah Myrgorod
 
Drupal Camp Kyiv 2013. Удобная разработка drupal проекта. Полезные модули.
Drupal Camp Kyiv 2013. Удобная разработка drupal проекта. Полезные модули.Drupal Camp Kyiv 2013. Удобная разработка drupal проекта. Полезные модули.
Drupal Camp Kyiv 2013. Удобная разработка drupal проекта. Полезные модули.Alex Barkov
 
Инсталляционные профили, создание сборок
Инсталляционные профили, создание сборокИнсталляционные профили, создание сборок
Инсталляционные профили, создание сборокAndrii Podanenko
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработкиAnna Fedoruk
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotkidrupalconf
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...Comfortable drupal project development. Useful modules (Andriy Yun, studio de...
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...Andriy Yun
 
Ruby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсRuby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсDigital-агентство Мэйк
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENBAleksandr Boichenko
 
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного вебаWUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного вебаYury Vetrov
 
Андрей Юн Удобная разработка Drupal проекта. Полезные модули
Андрей Юн Удобная разработка Drupal проекта. Полезные модулиАндрей Юн Удобная разработка Drupal проекта. Полезные модули
Андрей Юн Удобная разработка Drupal проекта. Полезные модулиAlbina Tiupa
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Ruslan Sharipov
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
Инсталяционные профили в Drupal
Инсталяционные профили в DrupalИнсталяционные профили в Drupal
Инсталяционные профили в DrupalDmytro Olaresko
 
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор БогатырёвОбзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор БогатырёвMinsk PHP User Group
 
Drupal и возможности его применения
Drupal и возможности его примененияDrupal и возможности его применения
Drupal и возможности его примененияMedia Gorod
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterAleksandr Tarasov
 
Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...
Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...
Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...DevGAMM Conference
 

Similaire à Создание дистрибутивов Drupal. Почему, зачем и как? (20)

Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровождения
 
Drupal Camp Kyiv 2013. Удобная разработка drupal проекта. Полезные модули.
Drupal Camp Kyiv 2013. Удобная разработка drupal проекта. Полезные модули.Drupal Camp Kyiv 2013. Удобная разработка drupal проекта. Полезные модули.
Drupal Camp Kyiv 2013. Удобная разработка drupal проекта. Полезные модули.
 
Инсталляционные профили, создание сборок
Инсталляционные профили, создание сборокИнсталляционные профили, создание сборок
Инсталляционные профили, создание сборок
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...Comfortable drupal project development. Useful modules (Andriy Yun, studio de...
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...
 
Ruby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсRuby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейс
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENB
 
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного вебаWUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
 
Андрей Юн Удобная разработка Drupal проекта. Полезные модули
Андрей Юн Удобная разработка Drupal проекта. Полезные модулиАндрей Юн Удобная разработка Drupal проекта. Полезные модули
Андрей Юн Удобная разработка Drupal проекта. Полезные модули
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Инсталяционные профили в Drupal
Инсталяционные профили в DrupalИнсталяционные профили в Drupal
Инсталяционные профили в Drupal
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор БогатырёвОбзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
 
Drupal и возможности его применения
Drupal и возможности его примененияDrupal и возможности его применения
Drupal и возможности его применения
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...
Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...
Архитектура для мобильных игр - с чего начать и популярные решения / Евгений ...
 
UML: CASE Tools Overview
UML: CASE Tools OverviewUML: CASE Tools Overview
UML: CASE Tools Overview
 

Создание дистрибутивов Drupal. Почему, зачем и как?

  • 1. Делаем дистрибутивы Почему, Зачем и Как? Алексей Горобец asgorobets
  • 2. Обо мне * Senior Drupal Developer @ Propeople * 2 года в Drupal * Трейнер * Комьюнити лидер
  • 5. В зале у нас? * Разработчики
  • 6. В зале у нас? * Разработчики * Сайт-билдеры
  • 7. В зале у нас? * Разработчики * Сайт-билдеры * Front-end разработчики
  • 8. В зале у нас? * Разработчики * Сайт-билдеры * Front-end разработчики * Менеджеры проектов
  • 9. На повестке дня 1. Что такое дистрибутив и зачем они нужны? 2. В каких случаях стоит создавать свой дистрибутив? 3. Как создать и поддерживать свой дистрибутив
  • 12. Чего же не хватает в Drupal? * Листинг контента? * WYSIWYG? * Удобный интерфейс? * Менеджемент медиа? * Поле типа Date и Link?
  • 13. Два типа пользователей Все есть, только надо настроить. Вот тебе туториалы, смотри как все просто! К черту ваш Drupal. Неюзабельный и сложный он!
  • 15. Что такое дистрибутив? Дистрибутивы предоставляют упакованную версию ядра Drupal с контриб модулями предварительно настроенными под определенный тип сайта.
  • 24. COD
  • 28. Так вы хотите разработать дистрибутив? А стоит ли? So You Guys Want to Build a Drupal Distribution http://www.youtube.com/watch?v=ECrUuRGzuH0 http://prezi.com/k2d_x8eczfzu/so-you-want-to-build-a-drupal-distro/
  • 29. Так вы хотите разработать дистрибутив?
  • 30. Может вам нужен Install Profile? Distribution: Install Profile: * Брендированный продукт * Решает определенный юзкейс * Является публичным проектом и поддерживается сообществом * Фокус на конечного пользователя (готов к использованию) * Предустанавливает модули * Создает конфигурации * Для внутреннего использования * Фокус на разработчика (готов к началу разработки)
  • 31. Или build base? * У вас Continuous Integration? * Распределенная команда разработчиков? * Нужна стандартизация? * Нужно автоматическое тестирование? * Надоело повторяться?
  • 32. С чего начать? Install Profile myprofile.info myprofile.profile myprofile.install
  • 33. Install Profile myprofile.info name = My Profile description = Description of what the profile does. core = 7.x dependencies[] = block dependencies[] = color dependencies[] = comment dependencies[] = contextual dependencies[] = dashboard dependencies[] = help dependencies[] = image dependencies[] = list dependencies[] = menu dependencies[] = number dependencies[] = options
  • 34. Install Profile myprofile.profile То же что и .module для модулей. Здесь удобно определять hook_install_tasks и подобные вещи связанные с процессом инсталяции.
  • 36. Install Profile myprofile.install <?php /** * Implement hook_install(). * * Perform actions to set up the site for this profile. */ function profilename_install() { include_once DRUPAL_ROOT . '/profiles/minimal/minimal.install'; minimal_install(); } ?>
  • 40. FAQ и подводные камни * Как правильно упаковывать компоненты? Не создавайте фичи по принципу общего типа компонента. Гиганты вроде Acme Content Types, или Acme Views зделают вашу систему сильнозависимой, их нельзя будет отключить, а реорганизация покажется адом. Организовывайте фичи по принципу независимого функционала. Например: Blog, Gallery, Voting
  • 41. FAQ и подводные камни * Как организовать фичи для реутилизации полей Нет необходимости дублировать поля общего назначения. Создавайте общие поля указывая их характеристики в имени поля. Например: field_file_single_public Поле типа файл, принимающее единственное значение, использует Public директорию. field_link_single, field_content_ref, field_body_no_summary
  • 42. FAQ и подводные камни * Как избежать конфликтов с base fields Все field_base полезно экспортировать в отдельную фичу, а уже field_instance в фичу с контент тайпом. Например: Acme Base Fields - field_base:field_body Acme Blog - field_instance:field_body Acme Article - field_instance:field_body
  • 43. FAQ и подводные камни * Как экспортить мои File Display в фичу если они определяются в hook_default_COMPONENT? Любую фичу можно переиспользовать экспортирую только необходимые изменения с помошью Features Override
  • 44. FAQ и подводные камни * Как экспортить variables Не волнуемся, на помошь приходит модуль Strongarm
  • 46. Простой Drush make api = 2 ; Core project projects[drupal][version] = 7 ; Modules ; -------projects[ctools][version] = 1.3 projects[ctools][type] = "module" projects[libraries][version] = 2.1 projects[libraries][type] = "module" projects[wysiwyg][version] = 2.2 projects[wysiwyg][type] = "module" projects[views][version] = 3.7 projects[views][type] = "module"
  • 47. Drush make для дистрибутива Stub make Подтягивает ядро Drupal и сам install profile. Здесь есть одно преимущество - удобно подтягивать несколько install profiles в вашем дистрибутиве. Profile make Подтягивает модули, темы, библиотеки, применяет патчи
  • 48. Stub make distro.make api = 2 core = 7.x projects[drupal][type] = core projects[drupal][version] = "7.23" ; This fixes multiple upload fields in gsb_media_center. http://drupal.org/node/1620030 projects[drupal][patch][1620030] = http://drupal.org/files/1620030-d7-2.patch projects[drupal][patch][1702132] = http://drupal.org/files/drupal-7.14-ajax-showeffect-not-function1702132.patch projects[drupal][patch][1783278] = https://drupal.org/files/schema-relative-1783278-7-D7-do-nottest.patch projects[drupal][patch][1232416] = https://drupal.org/files/issues/autocomplete-1232416-17-7x.patch ; Add GSB Public Profile projects[gsb_public][type] = profile projects[gsb_public][download][type] = git projects[gsb_public][download][url] = https://github.com/gsbitse/gsb_public.git projects[gsb_public][download][branch] = 1.4
  • 49. Profile make profile.make api = 2 core = 7.x ; Feature Flag projects[feature_flag][type] = module projects[feature_flag][download][type] = git projects[feature_flag][download][url] = git@github.com:gsbitse/feature_flag.git projects[feature_flag][download][tag] = 1.0 projects[feature_flag][subdir] = custom ; GSB Acquia Tokens projects[gsb_acquia_tokens][type] = module projects[gsb_acquia_tokens][download][type] = git projects[gsb_acquia_tokens][download][url] = git@github.com:gsbitse/gsb_acquia_tokens.git projects[gsb_acquia_tokens][download][tag] = 1.0 projects[gsb_acquia_tokens][subdir] = custom etc...
  • 51. Обновления с hook_update_N() /** * Add a 'year' date format. */ function myprofile_update_7000() { // Insert custom format: 2011 db_insert('date_formats') ->fields(array('format' => 'Y', 'type' => 'custom', 'locked' => 0)) ->execute(); // Insert custom format: 2011 db_insert('date_format_type') ->fields(array('type' => 'year', 'title' => 'Year', 'locked' => 0)) ->execute(); // Date Year Format variable_set('date_format_year', 'Y'); }
  • 52. Обновления с hook_update_N() * Все обновления из hook_update_N также идут в hook_install! * Новые модули активируем в: - dependencies (для первой инсталяции) - hook_update_N при помощи module_enable
  • 54. Билдим дистрибутив drush make distro.make Drush make рекурсивно вызывает .make файлы из подтягиваемых проектов! Таким образом запустив distro.make подтянются все модули из profile.make и так далее.
  • 55. Свой дистрибутив (варианты) 1. Начать с нуля 2. Использовать base distribution 3. Унаследовать дистрибутив
  • 56. Подход “с нуля” Преимущества * Включай только то что нужно (гибкость) Недостатки * Изобретение велосипеда. Придется все настраивать самим и экспортить в фичи, которые потом поддерживать * Дорого поддерживать контриб модули и следить за их обновлениями
  • 57. Подход “с базовой дистро” Преимущества * Готовые фичи из коробки * Поддержка базовой дистрибутив сообществом Недостатки * Не все фичи нужны, что-то придется отключать, а что-то переписыватьi * Big Drupal, больше модулей, больше шансов что всплывет баг
  • 59. Дистро на базе Panopoly Включить в profile.make фичи Panopoly: projects[panopoly_core][version] = 1.0-rc5 projects[panopoly_core][subdir] = panopoly projects[panopoly_core][patch][2087414] = https://drupal.org/files/issue-2087414.patch projects[panopoly_images][version] = 1.0-rc5 projects[panopoly_images][subdir] = panopoly projects[panopoly_theme][version] = 1.0-rc5 projects[panopoly_theme][subdir] = panopoly projects[panopoly_magic][version] = 1.0-rc5 projects[panopoly_magic][subdir] = panopoly projects[panopoly_widgets][version] = 1.0-rc5 projects[panopoly_widgets][subdir] = panopoly projects[panopoly_admin][version] = 1.0-rc5 projects[panopoly_admin][subdir] = panopoly projects[panopoly_users][version] = 1.0-rc5 projects[panopoly_users][subdir] = panopoly ; The Panopoly Toolset projects[panopoly_pages][version] = 1.0-rc5 projects[panopoly_pages][subdir] = panopoly projects[panopoly_wysiwyg][version] = 1.0-rc5 projects[panopoly_wysiwyg][subdir] = panopoly projects[panopoly_search][version] = 1.0-rc5 projects[panopoly_search][subdir] = panopoly
  • 61. Подход “наследование” Преимущества * Сканирует базовый инстал профайл на модули и темы * Возможность переписать родительский модуль поместив этот же модуль в дочерний профайл Недостатки * Патчим ядро * Пока никак нельзя унаследовать инсталл таски родителя
  • 62. Подход “наследование” 1. Ставим патч Make install profiles inheritable 2. Указываем родителя в .info base = BASE_PROFILE 3. Подробнее читаем Inheriting your Drupal profile from an existing distribution
  • 63. К дальнейшему изучению? * DrupalCon London 2011: BUILDING AND MAINTAINING A DISTRIBUTION IN DRUPAL 7 * Kit specification * Drush make * Apps Учимся по примеру: https://github.com/Gizra/Garment-Box https://github.com/gsbitse/gsb-distro а также проекты на drupal.org
  • 64. Demo
  • 65. Q&A