1 Отредактировано Fire_Horse (11-01-2018 00:06:52)

Тема: Модуль блоков для ЦМС

Здравствуйте.
Сделал модуль блоков 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.

http://ipic.su/img/img7/fs/Snimokekrana2018-01-10v21.1515610643.png
создание схемы блоков


2. Группы блоков. Вы можете сделать несколько групп для того, чтобы вызывать разные наборы блоков в разных местах одной страницы.

http://ipic.su/img/img7/fs/Snimokekrana2018-01-10v21.1515610691.png
создание группы блоков


3. Создание блока: Выбираете схему - нажимаете плюс - заполняете указанные поля.

http://ipic.su/img/img7/fs/Snimokekrana2018-01-10v21.1515610772.png
главная страница модуля после создания схемы - возможность создать блок

http://ipic.su/img/img7/fs/Snimokekrana2018-01-10v21.1515610813.png
создание блока


4. Создаете шаблон для схемы в папке /templates/имя_вашего_шаблона/bricks/название_схемы. В шаблоне будут доступны по названию поля, которые вы указали в схеме + поля name (название) и title (заголовок) самого блока. Плюс при вызове блока можно передавать свой набор данных.

5. Далее идете в категорию, или страницу - обнаруживаете вкладку "Дополнения модулей". На ней вы можете выбрать задать блоки, которые будут связаны с этой страницей/категорией. Порядок и группу можно менять.

http://ipic.su/img/img7/fs/Snimokekrana2018-01-10v21.1515610840.png
привязка блоков к контенту


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
    - добавлено кэширование блоков;
    - добавлен вызов группы блоков безотносительно к контенту;
    - исправлены некоторые ошибки.

Пока логика модуля недостаточно простая. Думаю над упрощением.
Если есть пожелания и предложения - пишите.

Thumbs up +1 Thumbs down

2

Re: Модуль блоков для ЦМС

/** 
* Набор трешовых методов идиота для обработки массивов. 
*/

После такого описания методов, я ваш большой фанат! smile

Разрабатываю модули для ImageCMS Corporate (оплата PayPal).

Re: Модуль блоков для ЦМС

А можно скрин? Увидеть как это всё работает

Thumbs up Thumbs down

4

Re: Модуль блоков для ЦМС

По поводу того, для чего нужен этот модуль:
1. Если в шаблонах, не привязанных к контенту (страницам или категориям) надо вывести ссылку на файл. Обычно это решается тем, что ссылка задается железно, либо созданием html-виджета. Но если заказчику надо самому выбирать файл - это можно сделать через модуль "Кирпичики". Создать блок с полем file - и дать заказчику ссылку на него, чтобы он спокойно менял через удобный интерфейс.

2. Если для страниц с одним шаблоном нужно выводить разные блоки в разном количестве. Обычно это решается через дополнительные поля, но для пользователя этот способ не всегда понятен и прост. Проще использовать модуль "Кирпичики" - там более-менее все наглядно.

Thumbs up Thumbs down