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' => $_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' => $_modx->resource.id,
        'context_key' => $_modx->config.localizator_key,
        'active' => 1
    ],
]}

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


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


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

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

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

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

Николай Савин
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 — Да!
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      19