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
5 964
+25
Поблагодарить автора Отправить деньги

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

Николай Савин
28 мая 2021, 12:45
+5
Не знаю что там внутри — но на первый взгляд выглядит прям революционно!
Обязательно к изучению
    Иван Бочкарев
    28 мая 2021, 14:13
    0
    Вот такое копирование контента для другой локализации добавить бы в Localizator…
      Олег Щавелев
      28 мая 2021, 21:10
      +3
      Молодец. Браво. Я работаю с ContentBlock — и сразу могу сказать что простота залог успеха. К сожелению это не про вышеуказанный компонент. PageBlocks — выглядит по описанию намного проще и лаконочней. Не зависимости от этого он выполняет задача билдера страниц. С осторожностью поделюсь наблюдением что необходимо такого типа пакет предусматривать возможность расширения пакета стороними разработчиками для его развития и роста популярности. Но так же уделять внимание краткой и доступной информацией с примеры как можно самому написать кастомный плагин.
      Надеюсь что он займет достоиное место в экосистеме Modstore.pro
        Miša 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
                          Сергей
                          09 мая 2024, 15:59
                          0
                          Почему этот компонент перестал существовать?
                              Сергей
                              11 мая 2024, 12:15
                              0
                              К сожалению документация не полная и купить полную версию не получится( Не могу разобраться, как ресайзить изображения, как использовать webp. Буду крайне признателен, если поможете. Я установил pthumb но не знаю как связать их.
                            Дмитрий
                            10 мая 2024, 15:42
                            0
                            @Aleksandr Huz еще раз огромное спасибо, дополнение офигенное! Единственное, с чем столкнулся – у меня как-то криво работает сортировка drag-n-drop'ом при заполнении Таблиц контентом. Начинаешь перетаскивать – появляется зеленая галочка (1 selected row) — индикатор, что можно тащить. Но сортировка либо вообще не срабатывает, либо перетаскивается куда-то не туда (непредсказуемо, через раз).
                            Это какой-то known bug? Есть шанс что починишь или мне искать обходной путь?
                            В доке не нашел подробностей, как будто бы должно работать сразу из коробки.
                            MODX 2.8.6
                            pageblocks-1.0.0-pl
                              Aleksandr Huz
                              11 мая 2024, 11:51
                              +1
                              Да, сортировка должна работать. Проверю и исправлю
                                Дмитрий
                                12 мая 2024, 18:28
                                0
                                Спасибо, если вдруг не получится воспроизвести – пиши, сделаю демку
                                  Дмитрий
                                  22 июля 2024, 14:31
                                  0
                                  Привет! Правильно я понимаю, что в какой-то из новых версий этот баг исправлен?
                                  И вопрос, раз вышла 2-я мажорная версия, то реально ли бесшовно обновится с 1-ой или есть какие-то breaking changes?
                                Сергей
                                28 мая 2024, 13:22
                                0
                                Может кто сталкивался с подобной проблемой, у меня не создаются блоки на главной странице, на внутренних работает все прекрасно.
                                Ошибка при заходе на страницу: assets/components/pageblocks/connector.php 500 (Internal Server Error) ext-base.js 21

                                Изначально вроде работало, сейчас не могу понять в чем причина.

                                И это еще как-то связанно с типом ресурса, если выбрать не Документ а статический ресурс, то ошибка пропадает.
                                  Сергей
                                  28 мая 2024, 14:14
                                  0
                                  Может кому понадобится, мне помогло удаление всех данных модуля из mysql и переустановка компонента.
                                    Сергей
                                    28 мая 2024, 15:53
                                    0
                                    Я нашел причину, есть нужно, могу детально описать.
                                      Дима Касаткин
                                      09 июля 2024, 16:28
                                      0
                                      Привет! Если это было связано с багом/фичей компонента, а не с особенностью вашего конкретного сайта и кастомных доработок — было бы здорово получить наводку, куда копать в случае проблем, спасибо!
                                        Сергей
                                        11 сентября 2024, 15:52
                                        0
                                        Добрый день!
                                        Прошу прощения, не увидел комментария, проблема бала (возможно даже две) если блок добавлен на страницу, а потом его удалили из конфига. И вторая, если настройка была назван на русском языке (конкретно где, не помню, но я так случайно делал). Потом появлялись проблемы с созданием и отображением блоков.
                                      Амир
                                      06 сентября 2024, 08:27
                                      0
                                      Нашел баг, если установить значения по умолчанию для типа поля изображение, а затем заполнить блок контентом, то поле изображение может перезаписаться на значение по умолчанию.

                                      Решается путем выставлении settimeout на меньшее значение
                                      assets/components/pageblocks/js/mgr/misc/utils.js

                                      Вот тут 301 строка
                                        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                        35