Створення і використання features, drupal bloggers

Якщо ви не розумієте про що мова, можете почитати першу, вступну частину циклу Features - Функціонал Features в Open Atrium.
Розглянемо використання «фіч» на прикладі. У нас є завдання додати на сайт можливість розміщення Резюме в мінімальному функціонал. Нам для цього потрібно:

  • новий тип матеріалу з необхідними полями;
  • необхідні дисплеї Views;
  • можливість сортування результатів (зробимо Exposed фільтром);
  • пункт меню що б бачити вже створені резюме;
  • блок з останніми доданими вакансіями.

Рішення за допомогою Features
Завдання є, тепер треба її вирішити. Описувати прописні істини тут не будемо, торкнемося лише використання «фичей», решта будемо мати на увазі що воно вже готове або створюємо як для звичайного сайту Друпала.

  • Варіант 1: Ставимо чистий Друпал, додаємо необхідні модулі та налаштовуємо необхідний функціонал.
  • Варіант 2: у нас вже є цей функціонал, який ми створили рік тому для іншого сайту. На цьому сайті вже все встановлено і налаштовано.

Для обох варіантів у нас повинно бути приблизно наступне:

  • Тип матеріалу для додавання резюме
  • Необхідні поля створені за допомогою CCK (вони можуть відрізнятися для різних сайтів, тому в другому варіанті у вас може бути трохи інший набір полів)
  • Пункт меню
  • Необхідні уявлення сторінка з резюме, блок з останніми резюме. Тут можна помітити невелику помилку - вид називається вакансії, а виводить резюме. Це не просто помилка, а реальні дані. Сайт на якому розміщують резюме також може розміщувати і вакансії, відміну функціоналу вакансій від резюме в назвах полів CCK, назві меню і ще пару дрібниць. Тому ми можемо створити модуль-фичу спочатку резюме. Потім поміняти назви і зберегти як новий модуль вакансій, це економія часу. Поки ми зупинимося тільки на нашому функціонал резюме, а цю помилку виправимо пізніше.

Тепер переходимо до створення нового модуля-фичи (/ admin / build / features / create). Ім'я модуля має бути англомовним в нижньому регістрі (імена функцій будуть збігатися з ім'ям модуля.

Тут вибираємо все що входить в функціонал нашого майбутнього модуля:
Зліва є список вибору - Add Components. в якому перераховані модулі сумісні з Features. За допомогою чекбоксів вибираємо все що нам потрібно і в той же час справа з'являється таблиця з вибраними компонентами.
На скріншоті відкритий перелік залежностей модулів на якому не вибрано жодного компонента в той же час з правого боку вже є перелік з яких буде складатися наш новий модуль. Всі ці компоненти додані автоматично. тому на цьому етапі нам необхідно подбати тільки про підключення власних модулів, якщо такі є.
Натискаємо кнопку Download features і зберігаємо архів з модулем.
Готово ми отримали необхідний модуль для створення резюме на будь-якому сайті. Все що тепер необхідно для розгортання нового функціоналу це розпакувати архів і включити в адмінці.
Подивимося зсередини на новий модуль
Розпакувавши архів бачимо 6 файлів (файли починаються з імені яке ми поставили при створенні «фічі», тому необхідно англомовну назву)

  • rezume.info
  • rezume.module
  • rezume.features.inc
  • rezume.defaults.inc
  • rezume.features.node.inc
  • rezume.features.views.inc

Файли rezume.info і rezume.module нам знайомі, це стандартні файли як і у будь-якого іншого модуля.

rezume.info - опис модуля
core = "6.x"
dependencies # 91; # 93; = "Date"
dependencies # 91; # 93; = "Features"
dependencies # 91; # 93; = "Number"
dependencies # 91; # 93; = "Taxonomy"
dependencies # 91; # 93; = "Text"
dependencies # 91; # 93; = "Views"
description = "Add rezume"
features # 91; content # 93; # 91; # 93; = "Rezume-field_amont"
features # 91; content # 93; # 91; # 93; = "Rezume-field_birth"
features # 91; content # 93; # 91; # 93; = "Rezume-field_contact"
features # 91; content # 93; # 91; # 93; = "Rezume-field_name"
features # 91; content # 93; # 91; # 93; = "Rezume-field_stydy"
features # 91; node # 93; # 91; # 93; = "Rezume"
features # 91; user # 93; # 91; # 93; = "Create rezume content"
features # 91; user # 93; # 91; # 93; = "Delete any rezume content"
features # 91; user # 93; # 91; # 93; = "Delete own rezume content"
features # 91; user # 93; # 91; # 93; = "Edit any rezume content"
features # 91; user # 93; # 91; # 93; = "Edit own rezume content"
features # 91; views # 93; # 91; # 93; = "Vacansii"
name = "rezume"
package = "Features"
project = "rezume"
rezume.module - сам модуль. Так як у нас базовий функціонал, то функцій ніяких немає, тільки підключення файлу в якому опис «фічі», це блоки, уявлення, меню та інше. Якщо вам необхідний додатковий функціонал то в цьому файлі можна його дописати.
include_once # 40; 'rezume.features.inc' # 41 ;;
rezume.features.inc - збірка функціоналу, складається з декількох хуков
hook_content_default_fields # 40; # 41 ;. hook_node_info # 40; # 41 ;. hook_user_default_permissions # 40; # 41 ;. hook_views_default_views # 40; # 41; .
Кожен з хуков підключає необхідний файл і викликає функцію для додавання view, блоків, дозволів та іншого.
Файли rezume.defaults.inc. rezume.features.node.inc. rezume.features.views.inc - це ініціалізація установок за замовчуванням і створення функціоналу.
В принципі ці файли нам чіпати не потрібно, так як тут вже все налаштовано і має завершений вигляд, але іноді необхідно підправити або додати функціоналу.
Нам на цьому етапі необхідно виправити нашу помилку в назві Views-вистави.
відкриваємо файл rezume.info і змінюємо рядок
features # 91; views # 93; # 91; # 93; = "Vacansii"
на
features # 91; views # 93; # 91; # 93; = "Rezume"
в файлі rezume.features.views.inc змінюємо
// Exported view: vacansii
$ View = new view;
$ View-> name = 'vacansii'; на
// Exported view: rezume
$ View = new view;
$ View-> name = 'rezume';
Тепер все вірно.
Відкат на контрольну точку
Модуль Features, у зв'язці з системою контролю версій (наприклад, SVN), дозволяє реалізовувати «контрольні точки» і виробляти потім відкат до попереднього стану. Давайте продовжимо роботу з нашим модулем і представимо що сайт працював деякий час і адміни сайту потроху «налаштовували» все що бачили в адмінці і наш модуль теж потрапив під ці зміни.
Включаємо модуль на сайті і змінимо в уявленнях Views відображення сторінки виведення резюме з табличного стилю на ноду (попереднє стан видно на скріншоті вище)

Якийсь час воно працює і в такому вигляді, але пізніше адмінам воно перестає подобається і вони хочуть повернутися до табличного вигляду і більш компактному списку. Де правити і що ніхто не пам'ятає, так як правило кілька людей протягом року і кожен потроху.
У разі модуля-фичи навіть така надумана ситуація насправді не така страшна. Переходимо на сторінку Features і бачимо наш модуль, також він відзначається статусом Overridden. що означає що його змінювали.

Натискаємо на посилання Overridden і на цій сторінці ми бачимо що були проведені зміни в Views уявленнях.

Для відкату до попереднього стану, необхідно встановити чекбокс поруч з Views і натиснути на кнопку Revert components. далі підтвердити своє бажання повернутися до первісних. В результаті ми повернемося до того виду який збережений нами в файлі.
Можна піти далі і встановити SVN і після внесення змін до модуль-фичу, пересоздавать його (кнопка Recreate Features) і підміняти файли на нові з коммітов цих зміни в SVN. І тепер ми можемо повертатися в будь-яку точку наших зміни як назад по часу так і вперед до тих змін від яких ми відмовилися.
підсумок
Я думаю після прочитання цієї замітки кожен зробить для себе сам висновок для якої мети можна використовувати модуль-фичу.
Насправді все описане вище це лише невеликий приклад для збереження функціоналу в файлах модуля. Тому крім фіксування поточного стану функціоналу можна також робити для себе архів напрацювань що б використовувати його в майбутніх проектах.
Наприклад, можна створити таким чином блоги, фотогалереї, новини, статті та багато чого ще і зберегти ці функції в окремі модулі-фичи. Тепер вам що б створити фотогалерею на новому сайті досить розпакувати модуль-фичу фотогалереї і включити його в адмінці з змін необхідно буде зробити по мінімуму додати видаляти поля або поднастроіть Views - запуск функціоналу Фотогалерея займе 5 хвилин від сили.

Схожі статті