Panels как философия Или как стоит использовать модуль Panelizer Александр Даниленко
May 08, 2015
Panels как философияИли как стоит использовать модуль Panelizer
Александр Даниленко
Глоссарий● Сайтбилдер — Drupal разработчик, собирающий проект из готовых
модулей и не желающий или не умеющий писать свои модули.● Entity (cущность) — всё, что можно расширить полями и показывать
как контент.● Panel layout (лейаут) — шаблон, при помощи которого выводится
определенный контент. ● Layout region (регион) — место для контента, который выводится
внутри шаблона.● Ctools Content type (CCT) — Контент, который передаётся в регион
лейаута панелей. Это может быть: поле, блок, вьюшка, кастомный CCT и т.д.
● Panelizer default panel — расположение определенных CCT в регионах.
● View mode (тип представления) — способ показа сущности. Например: Анонс, Полный контент, и т.д.
WTF?
Возможность использования панелей для вывода любых сущностей и любого их типа представления (view mode)
Теперь вы можете темизировать панели в то время, когда вы темизируете панели. Наркомания Drupal-way.
Немного теории.Как Drupal видит страницу?
● Блоки не зависят от контента (нет понятия контекста)
● Блок можно отобразить только в одном регионе
● Чтобы реализовать логику показа/скрытия блоков — нужно писать PHP код в админке.
● PHP код в админке — это всегда пичалька. Не делайте так никогда. Вообще.
HEADER
FOOTER
SIDEBAR LEFT
SIDEBAR RIGHTCONTENT
CONTENT
Немного теории.Как дизайнеры видят страницу?
● Вся страница является цельным отображением контента, где любой элемент может зависеть от показываемой страницы (от котнекста показа).
● Контекстом для показа может быть текущий пользователь, текущий язык, значение полей текущей сущности, значение поля связанного с текущей сущностью и т.д.
● Даже вьюшки.
Немного теории.Как Я вижу страницу?
● Вверху - основные элементы шапки, одинаковые для всех страниц. Например: логотип, название сайта, слоган.
● Контент - панель с некоторым количеством регионов.
● Футер - копирайты.
BRANDING
COPYRIGHT
CONTENT
Вывод
Зачем? Мне и так не плохо
Больше возможностей при редактировании контента● Вся мощь панелей:
○ Вставка всего чего угодно и куда угодно (блоки, кастомный текст, вьюшки, элементы страницы (сайтнейм, бредкрамбы, лого, слоган и т.д.). Проще говоря — всё то, что можно вставить в любую панель + поля из вашей сущности.
○ Можно создать уникальный лейаут, практически не прибегая к коду (Flexible).
○ Добавление классов к полям через админку (удобно когда используем сетку или CSS фреймворк)
○ In-pace editng● Переопределение настроек только для одной
сущности.
Пример сложной задачи
Контент содержит элементы, которые необходимо растянуть на 100% по ширине текущего экрана. В обычной ситуации - регион с контентом фиксируется по ширине и без костылей в подобном случае не обойтись.
Можно наделать новых регионов в теме, но использовать их только один раз на одной странице. Что не есть оптимизация возможностей.
Пример сложной задачи
Контент содержит элементы, которые необходимо растянуть на 100% по ширине текущего экрана. В обычной ситуации - регион с контентом фиксируется по ширине и без костылей в подобном случае не обойтись.
Можно наделать новых регионов в теме, но использовать их только один раз на одной странице. Что не есть оптимизация возможностей.
Когда использование Panelizer оправдано?● Когда мы — сайтбилдер.● Когда мы не хотим создавать кучу шаблонов для разных
представлений контента.● Когда у нас проект типа:
○ Набор Landing страниц○ Проект с минимумом логики и максимумом разнообразного
контента● Когда мы разрабатываем тему с нуля (кастомная тема).● Когда тип материала с одним набором полей необходимо
представлять в нескольких вариациях (цеплять разные лейауты для определенных нод одного и того же типа) с возможностью выбора на каждой ноде собственного лейаута.
● Когда используем CSS фреймворк○ Можно и без сетки, но придётся писать много стилей, вместо
обычного добавления классов элементам.
Когда ещё?● У Panelizer отличная интеграция с модулем Features - экспортирует
лейауты и настройки вывода для определенных типов сущностей.● Если мы разрабатываем проекты по методологии повторного
использования кода.● Если делаем собственный дистрибутив, установочный профиль или
фичу, которую будем использовать на нескольких проектах.● Если делаем тему на продажу. На выходе получаем кучу
кастомизабельности сайта при минимуме движений по изменению представления контента.
Panelizer - панацея от всех бед везде и всегда?
Нет
Когда использование Panelizer не оправдано?● Когда мы делаем проект с маленьким бюджетом и морока с панелями
не оплачивается.● Когда расширяемость проекта совершенно не важна.● Когда контент вне региона с контентом никак не связан с основным
контентом.● Когда не хотим писать свою тему, а используем какую нибудь базовую
(Zen, Omega, Adaptivetheme, etc.)
Как всё таки всё это сделать?Прототипизирование
● Нудный процесс рисования прототипов (мокапов, скетчей, и т.д.)
● Для чего:○ Чтобы охватить как
можно более оптимальное количество элементов, которые должны быть внутри главной панели с контентом.
Правки в теме● Убираем ширину у страницы и региона с контентом
○ Легче всего использовать сетку● Убираем в теме регионы с сайдбарами
Создание полей со ссылками
● Добавляем несколько block-reference полейCONTENT (THEME’S REGION)
field_before_content
field_body field_sidebar_2
field_after_content
field_sidebar_1
Настройка Panelizer
Настройка Panelizer
Настройка Panelizer
Настройка Panelizer
Настройка Panelizer
Настройка Panelizer
Настройка Panelizer
Настройка Panelizer
Результат
Создание своего лейаута
● Изменяем *.info файл○ plugins[panels][layouts] = panels/layouts
● Создаём файлы:○ THEME / panels / layouts / layout_1/ layout_1.inc○ THEME / panels / layouts / layout_1/ layout_1.css○ THEME / panels / layouts / layout_1 / layout_1.png○ THEME / panels / layouts / layout_1 / layout_1.tpl.php
● Чистим кеши
Создание своего лейаутаlayout_1.inc
Создание своего лейаутаlayout_1.inc
Результат
Ссылки
● Курс по Panels + Panelizer от Drupalize.me● Дистрибутив Drupal, придерживающийся идеи
“панели везде”: https://drupal.org/project/panopoly● Куча готовых лейаутов:
https://drupal.org/sandbox/apmsooner/1805170● Ещё больше лейаутов:
https://drupal.org/project/panels_extra_layouts
So long, and thanks for all the fish
RTFM
Александр Даниленко