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

Створення і використання features, drupal
Перша частина циклу про Features - Функціонал Features в Open Atrium.

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

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

Рішення за допомогою Features

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

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

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

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

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

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

Тут вибираємо все що входить в функціонал нашого майбутнього модуля:
Зліва є список вибору - 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 - опис модуля

rezume.module - сам модуль. Так як у нас базовий функціонал, то функцій ніяких немає, тільки підключення файлу в якому опис «фічі», це блоки, уявлення, меню та інше. Якщо вам необхідний додатковий функціонал то в цьому файлі можна його дописати.

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 і змінюємо рядок

в файлі rezume.features.views.inc змінюємо

Тепер все вірно.

Відкат на контрольну точку

Модуль Features, у зв'язці з системою контролю версій (наприклад, SVN), дозволяє реалізовувати «контрольні точки» і виробляти потім відкат до попереднього стану. Давайте продовжимо роботу з нашим модулем і представимо що сайт працював деякий час і адміни сайту потроху «налаштовували» все що бачили в адмінці і наш модуль теж потрапив під ці зміни.

Включаємо модуль на сайті і змінимо в уявленнях Views відображення сторінки виведення резюме з табличного стилю на ноду (попереднє стан видно на скріншоті вище)

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

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

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

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

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

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

Для відкату до попереднього стану, необхідно встановити чекбокс поруч з Views і натиснути на кнопку Revert components. далі підтвердити своє бажання повернутися до первісних. В результаті ми повернемося до того виду який збережений нами в файлі.

Можна піти далі і встановити SVN і після внесення змін до модуль-фичу, пересоздавать його (кнопка Recreate Features) і підміняти файли на нові з коммітов цих зміни в SVN. І тепер ми можемо повертатися в будь-яку точку наших зміни як назад по часу так і вперед до тих змін від яких ми відмовилися.

Я думаю після прочитання цієї замітки кожен зробить для себе сам висновок для якої мети можна використовувати модуль-фичу.

Насправді все описане вище це лише невеликий приклад для збереження функціоналу в файлах модуля. Тому крім фіксування поточного стану функціоналу можна також робити для себе архів напрацювань що б використовувати його в майбутніх проектах.

Наприклад, можна створити таким чином блоги, фотогалереї, новини, статті та багато чого ще і зберегти ці функції в окремі модулі-фичи.

Тепер вам що б створити фотогалерею на новому сайті досить розпакувати модуль-фичу фотогалереї і включити його в адмінці з змін необхідно буде зробити по мінімуму додати видаляти поля або поднастроіть Views - запуск функціоналу Фотогалерея займе 5 хвилин від сили.

Повозився з фичами. Перше враження - все досить повільно. Мені довелося збільшити max_execution_time з 30 сек до 2 хвилин. Модулів у мене на тестовому сайті близько 300.

Третє. Не понял, обов'язково включати модуль фичи в адмінці модулів admin / build / modules? Оскільки ніби й без цього працює, якщо зайти на сторінку admin / build / features і включити її, то фіча встановиться.

Четверте. Чи можна робити залежності? Тобто я хочу зробити, скажімо, фичу-станину, шасі, на яку буде нанизуватися решті функціонал. Наприклад, станина - це включення модуля dblog, настройка скільки записів журналу йому зберігати в таблиці, включення imagapi з настройками якості jpeg 90% і використання ImageMagic замість GD. Я роблю фичу-станину, де вказую всі ці модулі-настройки. Потім, я хочу зробити фічу-резюме, де вкажу, що вона залежить від станини, і тоді Imagecache в резюме буде генерувати прев'юшки резюме автоматом через ImageMagic. Якщо я вказую в .info-файлі модуля резюме залежність від модуля фичи stanina, то при установці він мені включає модуль stanina. Цього не потрібно, потрібно, щоб модуль він не включав, а встановив фичу stanina.

П'яте. Як встановити сервер фич? Щось я не знайшов посилання на модуль-сервер на drupal.org.

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

Нове на форумі

Вміст сайту публікується на умовах CreativeCommons Attribution-ShareAlike 3.0 або більш пізньої версії
Програмні коди в тексті статей - на умовах GNU GPL v2 або більш пізньої версії.
Drupal - торгівельна марка Дріса Байтаерта

Схожі статті