Тема: Модуль блоков для ЦМС
Здравствуйте.
Сделал модуль блоков https://github.com/Trigur/Bricks.
Иногда возникают ситуации, когда недостаточно просто дополнительных полей и виджетов.
Например клиенту крайне важно динамически менять блоки на странице. Он хочет, чтобы сегодня там был опрос, а завтра какой-нибудь баннер. И все это без вашего участия.
И приходится лепить "велосипеды".
И вот велосипед от меня - модуль "Кирпичики". Позволяет создавать свои блоки по типу виджетов, передавать в них определенный набор данных. Затем можно выбирать блоки при редактировании страниц и категорий.
Установка:
Только через composer. При этом не забудьте о том, что при обновлении композера отвалится пара плагинов (из-за несовместимости версий). Поэтому в comoser.json проставляем версии для следующих плагинов:
"tinymce/tinymce": "4.5.7",
"tubalmartin/cssmin": "2.4.8-p10"
Делаем:
composer require trigur/bricks
Идем в админку - в меню - "Модули" -> "Все модули". На владке "Установить модули" - устанавливаем модуль "Кирпичики".
Если возникают проблемы - пишите в теме.
Использование:
1. Схемы - скелет для будущих блоков. Заполняете:
- Название (машинное имя латиницей). Используется, в том числе, в качестве названия шаблона блока.
- Заголовок - используется для понимания человеком.
- Добавляете и заполняете поля. Аналогично - название и заголовок, плюс указываете тип поля. Сейчас доступно четыре - input, textarea, file, image.
создание схемы блоков
2. Группы блоков. Вы можете сделать несколько групп для того, чтобы вызывать разные наборы блоков в разных местах одной страницы.
создание группы блоков
3. Создание блока: Выбираете схему - нажимаете плюс - заполняете указанные поля.
главная страница модуля после создания схемы - возможность создать блок
создание блока
4. Создаете шаблон для схемы в папке /templates/имя_вашего_шаблона/bricks/название_схемы. В шаблоне будут доступны по названию поля, которые вы указали в схеме + поля name (название) и title (заголовок) самого блока. Плюс при вызове блока можно передавать свой набор данных.
5. Далее идете в категорию, или страницу - обнаруживаете вкладку "Дополнения модулей". На ней вы можете выбрать задать блоки, которые будут связаны с этой страницей/категорией. Порядок и группу можно менять.
привязка блоков к контенту
6. После установки модуля появляется возможность вызывать блоки у себя в шаблоне:
Функция contentBricks:
- $content - передаете $page, или $category. Или ничего. Тогда данных будут браться из ядра, но это лишний запрос в бд. Если у вас один шаблон для страниц и категорий, то сначала идет проверка на наличие блоков страницы. Если есть - выдаются они. Если нет - выдаются блоки категории страницы.
- $groupName - название группы.
- $data - дополнительные данные, которые вы можете передать в блок.
- $prefix, $suffix - две переменные для оборачивания блоков. Может понадобиться при верстке для отделения блоков друг от друга.
Функция categoryBricks:
- $categoryId - id категории.
- $groupName - см. выше.
- $data - см. выше.
- $prefix, $suffix - см. выше.
Функция pageBricks:
- $pageId - id страницы.
- $groupName - см. выше.
- $data - см. выше.
- $prefix, $suffix - см. выше.
Функция getBrick:
- $brickName - название блока.
- $data - см. выше.
Функция getBricksByGroup:
- $groupName - название блока.
- $data - см. выше.
- $prefix, $suffix - см. выше.
Например нам надо, чтобы часть блоков была над основным контентом страницы, а часть - под. Соответственно в шаблоне страницы мы будем вызывать:
{pageBricks($page['id'], 'over-info-block', null, '<div class="top-brick">', '</div>')}
...
<div class="page-content">
{$page['full_text']}
</div>
...
{pageBricks($page['id'], 'under-info-block', null, '<div class="bottom-brick">', '</div>')}
История изменений:
v0.4
- добавлено кэширование блоков;
- добавлен вызов группы блоков безотносительно к контенту;
- исправлены некоторые ошибки.
Пока логика модуля недостаточно простая. Думаю над упрощением.
Если есть пожелания и предложения - пишите.