Your SlideShare is downloading. ×
Создание дистрибутивов Drupal. Почему, зачем и как?
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

1,883
views

Published on


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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Делаем дистрибутивы Почему, Зачем и Как? Алексей Горобец asgorobets
  • 2. Обо мне * Senior Drupal Developer @ Propeople * 2 года в Drupal * Трейнер * Комьюнити лидер
  • 3. O Propeople http://wearepropeople.com
  • 4. O Propeople
  • 5. В зале у нас? * Разработчики
  • 6. В зале у нас? * Разработчики * Сайт-билдеры
  • 7. В зале у нас? * Разработчики * Сайт-билдеры * Front-end разработчики
  • 8. В зале у нас? * Разработчики * Сайт-билдеры * Front-end разработчики * Менеджеры проектов
  • 9. На повестке дня 1. Что такое дистрибутив и зачем они нужны? 2. В каких случаях стоит создавать свой дистрибутив? 3. Как создать и поддерживать свой дистрибутив
  • 10. Немного фактов По данным http://w3techs.com/
  • 11. Немного фактов По данным http://w3techs.com/
  • 12. Чего же не хватает в Drupal? * Листинг контента? * WYSIWYG? * Удобный интерфейс? * Менеджемент медиа? * Поле типа Date и Link?
  • 13. Два типа пользователей Все есть, только надо настроить. Вот тебе туториалы, смотри как все просто! К черту ваш Drupal. Неюзабельный и сложный он!
  • 14. Что такое дистрибутив?
  • 15. Что такое дистрибутив? Дистрибутивы предоставляют упакованную версию ядра Drupal с контриб модулями предварительно настроенными под определенный тип сайта.
  • 16. Ядро Drupal и contrib
  • 17. Drupal distribution
  • 18. Популярные дистрибутивы
  • 19. Commerce Kickstart
  • 20. OpenPublish
  • 21. OpenPublic
  • 22. Drupal Commons
  • 23. Open Atrium
  • 24. COD
  • 25. Почему дистрибутивы существуют? Не изобретай колесо!
  • 26. Почему дистрибутивы существуют? Наши услуги не всем по корману
  • 27. Distribution vs Install Profile
  • 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 и подобные вещи связанные с процессом инсталяции.
  • 35. Install Profile
  • 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. Основные инструменты Features
  • 38. Features
  • 39. Features
  • 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
  • 45. Основные инструменты Features Drush make
  • 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...
  • 50. Основные инструменты Features Drush make Хуки
  • 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
  • 53. Билдим дистрибутив drush make distro.make
  • 54. Билдим дистрибутив drush make distro.make Drush make рекурсивно вызывает .make файлы из подтягиваемых проектов! Таким образом запустив distro.make подтянются все модули из profile.make и так далее.
  • 55. Свой дистрибутив (варианты) 1. Начать с нуля 2. Использовать base distribution 3. Унаследовать дистрибутив
  • 56. Подход “с нуля” Преимущества * Включай только то что нужно (гибкость) Недостатки * Изобретение велосипеда. Придется все настраивать самим и экспортить в фичи, которые потом поддерживать * Дорого поддерживать контриб модули и следить за их обновлениями
  • 57. Подход “с базовой дистро” Преимущества * Готовые фичи из коробки * Поддержка базовой дистрибутив сообществом Недостатки * Не все фичи нужны, что-то придется отключать, а что-то переписыватьi * Big Drupal, больше модулей, больше шансов что всплывет баг
  • 58. Представляем Panopoly
  • 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. Яркий пример Попробуйте собрать свой GSB отсюда
  • 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

×