7. В зале у нас?
* Разработчики
* Сайт-билдеры
* Front-end разработчики
8. В зале у нас?
* Разработчики
* Сайт-билдеры
* Front-end разработчики
* Менеджеры проектов
9. На повестке дня
1. Что такое дистрибутив и зачем они
нужны?
2. В каких случаях стоит создавать свой
дистрибутив?
3. Как создать и поддерживать свой
дистрибутив
15. Что такое дистрибутив?
Дистрибутивы предоставляют
упакованную версию ядра
Drupal с контриб модулями
предварительно настроенными
под определенный тип сайта.
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/
30. Может вам нужен Install Profile?
Distribution:
Install Profile:
* Брендированный продукт
* Решает определенный
юзкейс
* Является публичным
проектом и поддерживается
сообществом
* Фокус на конечного
пользователя (готов к
использованию)
* Предустанавливает модули
* Создает конфигурации
* Для внутреннего
использования
* Фокус на разработчика
(готов к началу разработки)
31. Или build base?
* У вас Continuous Integration?
* Распределенная команда разработчиков?
* Нужна стандартизация?
* Нужно автоматическое тестирование?
* Надоело повторяться?
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
47. Drush make для дистрибутива
Stub make
Подтягивает ядро Drupal и сам install profile.
Здесь есть одно преимущество - удобно подтягивать
несколько install profiles в вашем дистрибутиве.
Profile 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
54. Билдим дистрибутив
drush make distro.make
Drush make рекурсивно вызывает .make файлы из подтягиваемых
проектов! Таким образом запустив distro.make подтянются все
модули из profile.make и так далее.
56. Подход “с нуля”
Преимущества
* Включай только то что нужно (гибкость)
Недостатки
* Изобретение велосипеда. Придется все
настраивать самим и экспортить в фичи, которые
потом поддерживать
* Дорого поддерживать контриб модули и следить
за их обновлениями
57. Подход “с базовой дистро”
Преимущества
* Готовые фичи из коробки
* Поддержка базовой дистрибутив сообществом
Недостатки
* Не все фичи нужны, что-то придется отключать, а
что-то переписыватьi
* Big Drupal, больше модулей, больше шансов что
всплывет баг
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