PageBlocks. Удобное управление контентом сайта.

Всем привет.

Документация

PageBlocks позволяет легко и быстро интегрировать верстку. Больше никаких дополнительных полей(tv). Добавляйте, удаляйте и перемещайте блоки в интерфейсе ресурса.




Блоки контента


Разберем несколько блоков для примера:

1. Обычный блок

Блок имеет структуру: заголовок, описание, 2 кнопки и картинку.


Теперь давайте создадим такой блок в конструкторе блоков:


В чанке hero нам доступны след. переменные: title, desc, appstore, googleplay и img

2. Блок с повторяющими элементами.


Здесь мы будем использовать дополнительную таблицу внутри блока:


В чанке выводим таблицу через параметр blocks(имя поля, которое мы задали в блоке):
{foreach $blocks as $block}
    <div class="card">
        <div class="card-header">
            <div class="icon {$block.icon}"></div>
            <h2>{$block.title}</h2>
        </div>
        <div class="card-body">
            {$block.desc}
        </div>
    </div>
{/foreach}

3. Готовые блоки.

Есть блок FAQ, который нужно вывести и на других страницах. Но, заполнять такие блоки на каждой странице было бы тупо.


Поэтому мы заполним блок только в одном месте — в базе готовых блоков.
1. Создаем структуру блока


2. Заполняем блок


3. Добавляем на страницы


Но, можно еще вывести этот блок вручную через идентификатор блока.
{'!pdoResources' | snippet: [
    'frontend_css' => '',
    'class' => 'pageBlock',
    'loadModels' => 'pageBlocks',
    'sortby' => 'rank',
    'sortdir' => 'asc',
    'limit' => 1,
    'tpl' => 'tpl.PageBlocks',
    'where' => [
        'id' => 4, // faq block id
        'active' => 1
    ],
]}

При обновлении базового блока, все соответствующие блоки будут обновлены автоматически, кроме тех блоков, у которых отмечена галочка «Уникальный блок».

Доступность


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


Вывод блоков на странице


{'!pdoResources' | snippet: [
    'frontend_css' => '',
    'class' => 'pageBlock',
    'loadModels' => 'pageBlocks',
    'sortby' => 'rank',
    'sortdir' => 'asc',
    'limit' => 0,
    'tpl' => 'tpl.PageBlocks',
    'where' => [
        'resource_id' => $_modx->resource.id,
        'active' => 1
    ],
]}

Мультиязычность


1. Контексты. (например, Babel)
Используем тот же код, что и выше.

2. Без контекстов (например, localizator)
В системной настройке pageblocks_contexts добавляем необходимые языки, например English==web||Russian==ru. Где English — это название языка, web — имя контекста. В недалеком будущем будет автоматический перевод.

Выводим блоки:
{'!pdoResources' | snippet: [
    'frontend_css' => '',
    'class' => 'pageBlock',
    'loadModels' => 'pageBlocks',
    'sortby' => 'rank',
    'sortdir' => 'asc',
    'limit' => 0,
    'tpl' => 'tpl.PageBlocks',
    'where' => [
        'resource_id' => $_modx->resource.id,
        'context_key' => $_modx->config.localizator_key,
        'active' => 1
    ],
]}

Экспорт / Импорт


Есть возможность экспортировать/импортировать блоки в формат csv. Очень удобно для копирования блоков с одной страницы в другую, а также для импорта большого кол-во однотипных блоков, но об этом узнаете чуть позже))


Продолжение следует…

Ссылка на компонент

P.S. Вы всегда бесплатно можете протестировать компонент на модхосте
Aleksandr Huz
28 мая 2021, 10:33
modx.pro
3
2 619
+25
Поблагодарить автора Отправить деньги

Комментарии: 22

Николай Савин
28 мая 2021, 12:45
+5
Не знаю что там внутри — но на первый взгляд выглядит прям революционно!
Обязательно к изучению
    Иван Бочкарев
    28 мая 2021, 14:13
    0
    Вот такое копирование контента для другой локализации добавить бы в Localizator…
      Олег Щавелев
      28 мая 2021, 21:10
      +3
      Молодец. Браво. Я работаю с ContentBlock — и сразу могу сказать что простота залог успеха. К сожелению это не про вышеуказанный компонент. PageBlocks — выглядит по описанию намного проще и лаконочней. Не зависимости от этого он выполняет задача билдера страниц. С осторожностью поделюсь наблюдением что необходимо такого типа пакет предусматривать возможность расширения пакета стороними разработчиками для его развития и роста популярности. Но так же уделять внимание краткой и доступной информацией с примеры как можно самому написать кастомный плагин.
      Надеюсь что он займет достоиное место в экосистеме Modstore.pro
        Misha Bulic
        31 мая 2021, 20:27
        +1
        Очень интересное дополнение. Если будет интеграция с msgallery, то будет просто мастхев для контентных сайтов. Правильно выше написали, если будут расширения то будет очень круто.
          Ivanov Alexandr
          05 июня 2021, 10:27
          0
          Поставил на демо сайте вместе с CKEditor не работает. Жаль.
            Aleksandr Huz
            05 июня 2021, 10:40
            0
            Да, действительно. Сегодня поправлю
              Aleksandr Huz
              05 июня 2021, 14:08
              +1
              Готово. Можно обновляться.
              Дмитрий
              15 июня 2021, 01:17
              +1
              Выглядит очень достойно! Давно хотел такой конструктор. Возможно, он пригодится не только для контентных сайтов, но и в некоторых местах, где раньше приходилось использовать MIGX. Ждем расширения функционала!
                Ivanov Alexandr
                15 июня 2021, 13:42
                0
                И очередно вопрос.
                Создал таблицу, создал поле. Захожу добавляю блок вроде все красиво и понятно, удобней чем через migx
                На сайте же мне выводит следующее
                Array ( [blocks] => Array ( [0] => Array ( [vopros] => Первый вопррос ) ) )

                Чанк который указал создан.
                  Aleksandr Huz
                  15 июня 2021, 14:12
                  0
                  Скорее всего, что чанк не загрузился. Скинуть доступы в админку можете?
                    Ivanov Alexandr
                    15 июня 2021, 14:14
                    0
                    Да я уже написал вам и доступы скинул на почту через сайт.
                    Ковыряю как только могу ничего в голову не приходит.
                      Aleksandr Huz
                      15 июня 2021, 14:41
                      0
                      Если посмотреть чанк, который идет с компонентом tpl.PageBlocks, то можно увидеть, что в соответствующий чанк передается только одно значtние — $values
                      {$_modx->getChunk('@FILE chunks/'~$chunk~'.tpl', $values)}
                      А вы вызываете чанк напрямую, значит он принимает только один параметр $values — это массив, и в нем уже все необходимые данные.
                        Ivanov Alexandr
                        15 июня 2021, 14:46
                        0
                        {'!pdoResources' | snippet: [
                        'frontend_css' => '',
                        'class' => 'pageBlock',
                        'loadModels' => 'pageBlocks',
                        'sortby' => 'rank',
                        'sortdir' => 'asc',
                        'limit' => 1,
                        'tpl' => 'tpl.PageBlocks',
                        'where' => [
                        'id' => 1,
                        'active' => 1
                        ],
                        ]}

                        Вызвал так как в документации
                        Получаю
                        Array ( [blocks] => Array ( [0] => Array ( [vopros] => Первый вопррос ) [1] => Array ( [vopros] => Второй ) ) )

                        Как мне чанк вызвать?
                          Ivanov Alexandr
                          15 июня 2021, 14:51
                          0
                          Я так в принципе изначально делал, но так как чанк указанный не подтягивался я и начала ковырять по разному пробуя.
                            Aleksandr Huz
                            15 июня 2021, 14:54
                            0
                            Такс, во первых спасибо, обязательно нужно изменить чанк. Я привык работать с файловыми элементами и поэтому чанк сделал для вывода файловых элементов. А по умолчанию, лучше выводит обычные чанки.
                            Вам нужно его изменить:
                            {$_modx->getChunk($chunk, $values)}
                            На тестовом сайте поменял.
                              Ivanov Alexandr
                              15 июня 2021, 15:11
                              0
                              Я и в файлах делал чанки но все равно не подтягивало.
                              Спасибо сейчас вижу что заработало. Буду пробовать дальше.
                  Ivanov Alexandr
                  15 июня 2021, 15:23
                  0
                  Только с Fenom работает? Почему то плейсхолдеры modx не срабатывают [[+answer]]
                    Aleksandr Huz
                    15 июня 2021, 20:12
                    0
                    Можно выводить и стандартные переменные. Вот так [[+answer]] должно работать.
                      Диман
                      15 июня 2021, 21:02
                      0
                      Только с Fenom работает? Почему то плейсхолдеры modx не срабатывают [[+answer]]
                      pdotools_fenom_modx — Да!
                      Ivanov Alexandr
                      25 июня 2021, 21:44
                      0
                      Столкнулся с еще одно проблемой. При использовании babel на мультиязычном сайте, в другом контексте когда используешь блоки такие же как использовал в основном контексте они на сайте отображаются но вот в админке не отображаются добавленные блоки к странице.
                        Ivanov Alexandr
                        25 июня 2021, 21:52
                        0
                        Отправил вам доступы.
                        Дмитрий
                        13 апреля 2024, 12:31
                        0
                        Попробовал данный компонент в 2024 (недавно кстати зарелизилась версия 1.0.0). Компонент прямо огонь, пока исключительно положительные ощущения. Даже бесплатная версия полностью покрывает мои потребности (несложный конструктор лендингов). Впервые за несколько лет взгрустнулось, что на большинстве проектов я ушел с MODX.
                        На Модхосте компонент, к сожалению, больше не доступен, но доступен в главном репо. дополнений MODX.
                        Вот его сайт pageblocks.boshnik.com/
                        А вот репа бесплатной версии github.com/Boshnik/PageBlocksFree
                          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                          22