Your SlideShare is downloading. ×
0
Делаем дистрибутивы
Почему, Зачем и Как?

Алексей Горобец
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 и L...
Два типа пользователей

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

К черту ваш 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/...
Так вы хотите разработать
дистрибутив?
Может вам нужен 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
dependenci...
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 pr...
Основные инструменты
Features
Features
Features
FAQ и подводные камни
* Как правильно упаковывать компоненты?
Не создавайте фичи по принципу общего типа
компонента. Гиган...
FAQ и подводные камни
* Как организовать фичи для реутилизации
полей
Нет необходимости дублировать поля общего
назначения....
FAQ и подводные камни
* Как избежать конфликтов с base fields
Все field_base полезно экспортировать в отдельную
фичу, а уж...
FAQ и подводные камни
* Как экспортить мои File Display в фичу если они
определяются в hook_default_COMPONENT?
Любую фичу ...
FAQ и подводные камни
* Как экспортить variables
Не волнуемся, на помошь приходит модуль
Strongarm
Основные инструменты
Features

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

; Modules
; -------projects[ctools][version] = 1....
Drush make для дистрибутива
Stub make
Подтягивает ядро Drupal и сам install profile.
Здесь есть одно преимущество - удобно...
Stub make
distro.make
api = 2
core = 7.x

projects[drupal][type] = core
projects[drupal][version] = "7.23"
; This fixes mu...
Profile make
profile.make
api = 2
core = 7.x
; Feature Flag
projects[feature_flag][type] = module
projects[feature_flag][d...
Основные инструменты
Features

Drush make

Хуки
Обновления с hook_update_N()
/**
* Add a 'year' date format.
*/
function myprofile_update_7000() {
// Insert custom format...
Обновления с hook_update_N()
* Все обновления из hook_update_N также идут в
hook_install!
* Новые модули активируем в:
- d...
Билдим дистрибутив

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

drush make distro.make

Drush make рекурсивно вызывает .make файлы из подтягиваемых
проектов! Таким об...
Свой дистрибутив (варианты)
1. Начать с нуля
2. Использовать base distribution
3. Унаследовать дистрибутив
Подход “с нуля”
Преимущества
* Включай только то что нужно (гибкость)
Недостатки
* Изобретение велосипеда. Придется все
на...
Подход “с базовой дистро”
Преимущества
* Готовые фичи из коробки
* Поддержка базовой дистрибутив сообществом
Недостатки
* ...
Представляем Panopoly
Дистро на базе Panopoly
Включить в profile.make фичи Panopoly:
projects[panopoly_core][version] = 1.0-rc5
projects[panopol...
Яркий пример

Попробуйте собрать свой GSB отсюда
Подход “наследование”
Преимущества
* Сканирует базовый инстал профайл на модули и
темы
* Возможность переписать родительск...
Подход “наследование”
1. Ставим патч
Make install profiles inheritable
2. Указываем родителя в .info
base = BASE_PROFILE
3...
К дальнейшему изучению?
* DrupalCon London 2011: BUILDING AND MAINTAINING A
DISTRIBUTION IN DRUPAL 7
* Kit specification
*...
Demo
Q&A
Создание дистрибутивов Drupal. Почему, зачем и как?
Upcoming SlideShare
Loading in...5
×

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

1,944

Published on

1 Comment
5 Likes
Statistics
Notes
No Downloads
Views
Total Views
1,944
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
12
Comments
1
Likes
5
Embeds 0
No embeds

No notes for slide

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

  1. 1. Делаем дистрибутивы Почему, Зачем и Как? Алексей Горобец asgorobets
  2. 2. Обо мне * Senior Drupal Developer @ Propeople * 2 года в Drupal * Трейнер * Комьюнити лидер
  3. 3. O Propeople http://wearepropeople.com
  4. 4. O Propeople
  5. 5. В зале у нас? * Разработчики
  6. 6. В зале у нас? * Разработчики * Сайт-билдеры
  7. 7. В зале у нас? * Разработчики * Сайт-билдеры * Front-end разработчики
  8. 8. В зале у нас? * Разработчики * Сайт-билдеры * Front-end разработчики * Менеджеры проектов
  9. 9. На повестке дня 1. Что такое дистрибутив и зачем они нужны? 2. В каких случаях стоит создавать свой дистрибутив? 3. Как создать и поддерживать свой дистрибутив
  10. 10. Немного фактов По данным http://w3techs.com/
  11. 11. Немного фактов По данным http://w3techs.com/
  12. 12. Чего же не хватает в Drupal? * Листинг контента? * WYSIWYG? * Удобный интерфейс? * Менеджемент медиа? * Поле типа Date и Link?
  13. 13. Два типа пользователей Все есть, только надо настроить. Вот тебе туториалы, смотри как все просто! К черту ваш Drupal. Неюзабельный и сложный он!
  14. 14. Что такое дистрибутив?
  15. 15. Что такое дистрибутив? Дистрибутивы предоставляют упакованную версию ядра Drupal с контриб модулями предварительно настроенными под определенный тип сайта.
  16. 16. Ядро Drupal и contrib
  17. 17. Drupal distribution
  18. 18. Популярные дистрибутивы
  19. 19. Commerce Kickstart
  20. 20. OpenPublish
  21. 21. OpenPublic
  22. 22. Drupal Commons
  23. 23. Open Atrium
  24. 24. COD
  25. 25. Почему дистрибутивы существуют? Не изобретай колесо!
  26. 26. Почему дистрибутивы существуют? Наши услуги не всем по корману
  27. 27. Distribution vs Install Profile
  28. 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. 29. Так вы хотите разработать дистрибутив?
  30. 30. Может вам нужен Install Profile? Distribution: Install Profile: * Брендированный продукт * Решает определенный юзкейс * Является публичным проектом и поддерживается сообществом * Фокус на конечного пользователя (готов к использованию) * Предустанавливает модули * Создает конфигурации * Для внутреннего использования * Фокус на разработчика (готов к началу разработки)
  31. 31. Или build base? * У вас Continuous Integration? * Распределенная команда разработчиков? * Нужна стандартизация? * Нужно автоматическое тестирование? * Надоело повторяться?
  32. 32. С чего начать? Install Profile myprofile.info myprofile.profile myprofile.install
  33. 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. 34. Install Profile myprofile.profile То же что и .module для модулей. Здесь удобно определять hook_install_tasks и подобные вещи связанные с процессом инсталяции.
  35. 35. Install Profile
  36. 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(); } ?>
  37. 37. Основные инструменты Features
  38. 38. Features
  39. 39. Features
  40. 40. FAQ и подводные камни * Как правильно упаковывать компоненты? Не создавайте фичи по принципу общего типа компонента. Гиганты вроде Acme Content Types, или Acme Views зделают вашу систему сильнозависимой, их нельзя будет отключить, а реорганизация покажется адом. Организовывайте фичи по принципу независимого функционала. Например: Blog, Gallery, Voting
  41. 41. FAQ и подводные камни * Как организовать фичи для реутилизации полей Нет необходимости дублировать поля общего назначения. Создавайте общие поля указывая их характеристики в имени поля. Например: field_file_single_public Поле типа файл, принимающее единственное значение, использует Public директорию. field_link_single, field_content_ref, field_body_no_summary
  42. 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. 43. FAQ и подводные камни * Как экспортить мои File Display в фичу если они определяются в hook_default_COMPONENT? Любую фичу можно переиспользовать экспортирую только необходимые изменения с помошью Features Override
  44. 44. FAQ и подводные камни * Как экспортить variables Не волнуемся, на помошь приходит модуль Strongarm
  45. 45. Основные инструменты Features Drush make
  46. 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. 47. Drush make для дистрибутива Stub make Подтягивает ядро Drupal и сам install profile. Здесь есть одно преимущество - удобно подтягивать несколько install profiles в вашем дистрибутиве. Profile make Подтягивает модули, темы, библиотеки, применяет патчи
  48. 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. 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...
  50. 50. Основные инструменты Features Drush make Хуки
  51. 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. 52. Обновления с hook_update_N() * Все обновления из hook_update_N также идут в hook_install! * Новые модули активируем в: - dependencies (для первой инсталяции) - hook_update_N при помощи module_enable
  53. 53. Билдим дистрибутив drush make distro.make
  54. 54. Билдим дистрибутив drush make distro.make Drush make рекурсивно вызывает .make файлы из подтягиваемых проектов! Таким образом запустив distro.make подтянются все модули из profile.make и так далее.
  55. 55. Свой дистрибутив (варианты) 1. Начать с нуля 2. Использовать base distribution 3. Унаследовать дистрибутив
  56. 56. Подход “с нуля” Преимущества * Включай только то что нужно (гибкость) Недостатки * Изобретение велосипеда. Придется все настраивать самим и экспортить в фичи, которые потом поддерживать * Дорого поддерживать контриб модули и следить за их обновлениями
  57. 57. Подход “с базовой дистро” Преимущества * Готовые фичи из коробки * Поддержка базовой дистрибутив сообществом Недостатки * Не все фичи нужны, что-то придется отключать, а что-то переписыватьi * Big Drupal, больше модулей, больше шансов что всплывет баг
  58. 58. Представляем Panopoly
  59. 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
  60. 60. Яркий пример Попробуйте собрать свой GSB отсюда
  61. 61. Подход “наследование” Преимущества * Сканирует базовый инстал профайл на модули и темы * Возможность переписать родительский модуль поместив этот же модуль в дочерний профайл Недостатки * Патчим ядро * Пока никак нельзя унаследовать инсталл таски родителя
  62. 62. Подход “наследование” 1. Ставим патч Make install profiles inheritable 2. Указываем родителя в .info base = BASE_PROFILE 3. Подробнее читаем Inheriting your Drupal profile from an existing distribution
  63. 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. 64. Demo
  65. 65. Q&A
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×