Page Builder - предустановленные блоки с пользовательским наполнением

Данный пакет дополнений позволяет задать набор шаблонов секций, а наполнение и вывод предоставить менеджеру.

Полное и актуальное описание.

Пример файла конфигурации.

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

При редактировании документа добавляется новая вкладка «Page Builder», название вкладки можно изменить в настройках плагина.

Для вывода используйте сниппет [[PageBuilder]], параметры можно посмотреть здесь.


78 комментариев

avatar
Очень интересно но не помешало бы хотя бы пару скриншотов как оно выглядит в админке
avatar
Сейчас, может еще и видео сделаю
avatar
скрины в студию)
avatar
Добавил скриншоты, видео
avatar
По проблеме — да, иногда контентщику не хватает возможности разместить текст колонками, при этом к табличкам прибегать запрещено, что такое хтмл и плавающие блоки он не слышл, а на все возможные варианты шаблоны «2 колонки», «3 колонки», «3+2+3 колонки» — не предусмотришь. Кто как это решает?
По дополнению — есть ли возможность расставлять блоки колонками непосредственно при редактировании? или все жестко в конфиге задается?
avatar
Если речь только о тексте, то можно создать несколько одинаковых шаблонов с разными классами и разруливать через css columns.
avatar
Хорошая работа, спасибо, что поделились.
avatar
В принципе, учитывая, что вложенность не ограничена, в каких-то ситуациях дополнение может заменить multiTV.
Ну и пока это альфа-версия, будет добавляться функционал, приветствуются предложения.
avatar
Первым делом напрашивается множественная вставка картинок.
avatar
Да, это в планах, в multiTV этого сильно не хватало.
avatar
Добавлена множественная вставка картинок
avatar
Огромная благодарность автору. Очень удобно. Только недавно начала делать проект, где такой функционал очень необходим. Жаль, что поздно, но в следующих проектах обязательно попробую.
avatar
Спасибо огромное за данное дополнение
avatar
Выглядит круто, надо протестировать)
avatar
Для чайников можно расписать как происходит установка,
1)закинул файлы в assets/…
2) создал снипет и плагин с содержимым из файлов install
3) на странице поставил [[ContentBlocks]]
=
avatar
нужно еще таблицу в базе создать, modx_contentblocks
github.com/sunhaim/contentblocks/blob/master/install/setup.data.sql
avatar
создал, в плагине ставил вместе/раздельно id шаблона, документа, но новый таб не создается((
avatar
может события не отметили? :)
avatar
отмечал
avatar
переустановил админку, поставил галочку установить демо, с первого маху все ставиться((
avatar
если в репозитории поставить не package, а любой другой, то галочка не выводится, сразу все ставится.
avatar
да спс, все заработало, видимо косяк был в админке установленой
avatar
У меня на 1.3 та же ошибка (нет вкладки), консоль чистая.
Что вы имеете в виду под словами «переустановил админку»?
avatar
Разобрался, вопрос решен.
avatar
Стоит отметить, что тут еще не хватает функционала, который, при дублировании документа, дублировал бы и данные ContentBlocks в новый документ.
avatar
Точно, это будет сделано. Как и очистка при удалении документа.
avatar
Офигенная штука получилась наконецто добрался поюзать :)
Небольшой обзорчик:)
monosnap.com/file/40FWLGRMhptgVHfYSiYGZIYNNjfvCH
avatar
Сделать бы у сниппета возможность, чтобы можно было порядковый номер блока указать или конфиг блока для вывода, было бы вообще збс! Руки дойдут, может сам наваю и пулл-реквест закину.
  • EGO
  • 0
avatar
Про порядковый номер понял, а про конфиг блока для вывода не понял. Вроде ведь конфиг блока для вывода задается в конфиге блока.
avatar
Хотя нет, про порядковый номер я тоже не понял
avatar
В таблице БД есть колонки с номером сортировки и названием конфигурации, вот по ним бы и делать выборку. Только что, понял что может быть несколько одинаковых конфигурации для одной страницы, с эти уже сложнее)) А вывод, кстати, можно через сниппет обёртку для DocLister сделать, если в шаблон делать просто вывод значение делать (по аналогии с sgLister).
avatar
Сортировку задает менеджер, как и блоки, которые ему нужны. Т.е. в вашей выборке может не быть того, что вы ожидаете.
Наверное, будет проще, если вы поясните, чего хотите добиться в результате.
avatar
Не все менеджеры одинаково полезны, это да)) но если менеджер умеет вставлять сниппеты, то он хочет уметь выводить нужные блоки в нужных местах. Т.е понимает, что в случае изменения сортировки вывод тоже измениться, что компенсируется, если вывод делать по названию конфига, с учётом, что повторных конфигурации для страницы нет.
avatar
Как не костыльный вариант, можно предложить такое улучшение: для каждого блока генерировать уникальный токен и во фронтенд сделать кнопку «Скопировать код для вставки». Вуаля!)
avatar
Со времени первой публикации были добавлены новые возможности:
1. Новые плейсхолдеры ([+iteration+], [+index+]);
2. Подгрузка шаблонов из чанков, файлов, и пр.;
3. Группы шаблонов, для указания в вызове сниппета;
4. Параметры сниппета для фильтрации вывода;
5. Вид добавления блоков в виде иконок или изображений;
6. Всякие мелкие улучшения для более комфортной работы.

Полную и актуальную информацию по работе с пакетом можно узнать здесь.
avatar
Обновил EVO до 1.3.4, отключил ContentBlocks, установил Page Builder, для теста переименовал sample-конфиг, как итог вот:


В консоле ошибка тут:
<? if ( $placement == 'content' ) { ?>
		jQuery('#content-blocks').insertAfter( jQuery('#content_body').closest('table') );
	<? } ?>

Т.е. php не обработал почему-то… только у меня так?
  • EGO
  • 0
avatar
Что-то коряво обновилось видимо. Новая установка таких ошибок не показывает.
avatar
Вобще странно, там перед надписью «В этом блоке нет полей...» должно выводиться название блока. В конфиге ничего не меняли?
avatar
Проделал то же самое, все обновилось и работает нормально. Есть возможность предоставить доступ?
Комментарий отредактирован 2017-08-30 05:43:27 пользователем kassio
avatar
Видимо реально что-то криво обновил, сам попозже разберусь, спасибо!
avatar
Ставил пару дней назад никаких проблем не было
avatar
Ларчик просто открывался, на сервере недосмотрел и стало short_open_tag = Off, а надо On :). Соответственно tpl-файлы в которых просто <?, а не <?php не обрабатывались.
avatar
Да, есть такое, в новой версии все короткие теги уберу
avatar
В топике ссылка Пример файла конфигурации битая, исправьте, пожалуйста.
avatar
исправил
avatar
Нет вкладки на 1.3.6
Ставил из магазина.
Сниппет, плагин с событиями, таблица в базе, файлы — все на месте.
Переустанавливать админку, ессно, не вариант.
Как посмотреть-то, как оно вообще работает?
Сниппет не выводит ничего, разумеется, ошибки нет
avatar
Конфиг создали/переименовали?
avatar
АААААА… понял. Переименовал из .sample
Надо дописать в readme для таких, как я
avatar
Извините, что еще раз тревожу, но почему-то при сохранении документа пропадают наборы блоков и в базу ничего не пишется… Просто открывается дефолтовая вкладка без блоков вообще. OnDocFormSave на плагине стоит
monosnap.com/file/Ia3P8iWEkOOsZR3LVwyVBumkO7W0lC#
avatar
Решили в личке, проблема была в том, что при установке сработали не все sql-запросы.
avatar
1)Поставил плагин из репо
2)Удалил .sample в папке config
3)В шаблон добавил вызов [[PageBuilder]]

Вкладка появилась, но при нажатии на плюсик ничего не происходит
avatar
Какая версия PHP?
avatar
5.4.30 MODx 1.4.0.RC
avatar
А нужен 5.6
avatar
Доброго времени суток
исползую PageBuilder в связке MODX Evolution 1.2.1-d9.1.0, все работает, но есть один нюанс — если ресурс не опубликован то при переходе по кнопке «Просмотр» с бекенда данные выводимые PageBuilder не отображаются пока не опубликуешь весь ресурс, кто то с этим сталкивался? и как побороли?
avatar
Попробовал, крутая штука, спасибо! Но не могу понять логику offset и limit.

Для ресурса заполнено 2 блока PB с одинаковой конфигурацией (пусть будет adv_block), но с разным наполнением.

Их нужно вывести по одному, причем между ними сторонний код, не относящийся к PB. Вывожу так:

[[PageBuilder? &blocks=`adv_block` &limit=`1` &offset=`0`]]

   ...тут посторонний HTML...

[[PageBuilder? &blocks=`adv_block` &limit=`1` &offset=`1`]]


И не выводится вообще ничего. В других вариантах выводится как-то, но не так как мне нужно. Или нельзя сочетать фильтрацию по имени конф-ции и limit?

Просьба подсказать.
avatar
У меня срабатывает первый вызов. Второй только с "&limit=`2`", т.к. limit похоже сквозной, нужно это исправить. Уже исправил — github.com/mnoskov/pagebuilder/commit/16a02bd68515b8445ce97ee54a59f54fb0a46614
Комментарий отредактирован 2018-03-23 08:02:27 пользователем kassio
avatar
Если переформулировать мой вопрос, он как раз так и звучит — насколько «сквозной» подсчет при limit: по всей странице, по имени конфига или же все-таки по отфильтрованной выборке на ресурсе.

Код — честно — лень было смотреть, надеялся что обойдусь )))

Отлично, спасибо, сейчас потестю.
avatar
Теперь limit, похоже, работает корректно.
Но не работает offset — оба вызова сниппета выводят один и тот же блок, 1-й по порядку в Админке.
avatar
Не могу подтвердить, у меня все верно работает.
avatar
PHP 5.6.19, MySQL 5.5.48 — Нормально?
Да в общем-то куда нормальнее. Что ж, буду смотреть подробнее.
Комментарий отредактирован 2018-03-23 12:51:43 пользователем Aharito
avatar
Наша с вами разница была (видимо) вот в чём: вы для теста создали 2 блока и 2 вызова сниппета.

А у меня помимо этого был еще и «отдельный» блок (с другим именем конф-ции) и отдельный вызов сниппета PB в самом начале страницы. Он и приводил к разнице в наших с вами результатах.

В общем, offset также сквозной, как здесь limit. Поэтому offset «учел» ещё один «лишний» блок на моей странице (несмотря на то, что у него иное имя конф-ции, чем у 2-х тестовых блоков). И в итоге у меня заработал такой код с увеличенным на 1 оффсетом:

[[PageBuilder? &blocks=`adv_block` &limit=`1` &offset=`1`]]

...тут сторонний HTML

[[PageBuilder? &blocks=`adv_block` &limit=`1` &offset=`2`]]
Комментарий отредактирован 2018-03-23 17:50:06 пользователем Aharito
avatar
Ну а вообще, чтобы не ковыряться, я сделал вывод в контейнеры, и все дела.
avatar
Кстати, контейнеры с placement=tv работают нестабильно, поэтому сделал контейнеры во вкладках (placement=tab).

В общем, багов еще немало, надо бы как-нибудь краудфандинг, что ли, организовать по доработке PB.
avatar
По tv-размещению также создайте issue
avatar
Пришлось заново воспроизвести ситуацию ошибки, но не пожалел, потрудился во славу сообщества :)
avatar
Проверил issue на всех возможных режимах группировки ТВ — всё работает. Благодарю за быстрый профессиональный отклик.
avatar
AdBlock может зарезает?
avatar
Здравствуйте. А как пользоваться параметром templates? Например:
[!PageBuilder? &templates=`captions` !]

Конфиг
У меня почему-то плейсхолдеры не выводятся.
avatar

'templates' => [
    'owner' => '[+slide+]',
    'captions' => '[+text+], [+size+], [+posX+], [+posY+]',

    'captions_set' => [
        'owner' => '2: [+slide+]',
        'captions' => '2: [+text+], [+size+], [+posX+], [+posY+]',
    ],
],

[!PageBuilder? &templates=`captions_set`!]
avatar
Спасибо. Нужно было ещё добавить [+captions+].Pаработал всё-таки такой вариант:
'templates' => [
    'owner' => '[+slide+]',
    'captions' => '[+text+], [+size+], [+posX+], [+posY+]',

    'captions_set' => [
        'owner' => '2: [+slide+][+captions+]',
        'captions' => '2: [+text+], [+size+], [+posX+], [+posY+]',
    ],
],
avatar
Хочу сделать блоки PageBuilder вместо ТВ, без вкладки.
Как написано в гайде, сделал 'placement' => 'tv', в конфиге контейнера. Ничего. Сделал то же в конфиге самого плагина, сработало. Но теперь начисто игнорит show_in_templates, и показывает кнопки добавления в самом низу любой страницы.
Комментарий отредактирован 2018-04-12 13:51:33 пользователем 1px
  • 1px
  • 0
avatar
Сам tv-параметр создали (имя должно совпадать с именем контейнера)? Блоки привязали к контейнеру?
А как это вы сделали placement tv в конфиге плагина? Там же нет такого варианта.
Комментарий отредактирован 2018-04-12 16:14:58 пользователем kassio
avatar
Как «передать глобальный плейсхолдер» (поле) из «оборачивающего» поля во вложенное групповое? Пример:

'templates' => [
  'owner' => '[+images+]',
   
  'images' => '<img src="[[phpthumb? &input=`[+image+]` &options=`[+crop_global+]`]]">',
],

'fields' => [
   'crop_global' => [
       'caption'  => 'Обрезка картинок',
       'type'     => 'dropdown',
       'elements' => 'w=1074||w=537||w=268',          
   ],  
         
   'images' => [
      'caption' => 'Картинки',
      'type'    => 'group',
      'fields' => [
         'image' => [
             'caption' => 'Картинка',
             'type'    => 'image',
         ],            
      ],
   ],
],


Хотелось бы один раз задать поле crop_global, чтобы потом не задавать его отдельно для каждой картинки, а чтобы его значение использовалось для обрезки любой новой картинки во вложенном групповом поле images.

Но внутри вложенного шаблона «внешний» плейсхолдер недоступен. Есть ли какие-то варианты?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.