PageBlocks - первое использование. Кейсы. Свой сниппет вывода.

Очень хочу поделиться своими впечатлениями от использования пакета PageBlocks от разработчика @Aleksandr Huz. Буду краток, пакет классный (Я люблю изъясняться кратко и по делу).

Попробую сформулировать в чем его «классность»:

  • Возможность просто и через интерфейс админки формировать формы для заполнения материалов на сайте. Возможность оградить себя от большого количество использования ТВ-полей в проекте
  • Cвои рендеры (xtype) полей они хорошо проработаны и их много (На все случаи жизни)
  • Не нужно проектировать и работать с «кастомными» таблицами. Поэтому конструктирование форм, это очень быстро и иногда даже весело.
  • Возможность сгруппировать интерфейс с помощью табов. Это повышает юзабилити формы — очень практично и удобно
  • Возможность настройки валидации полей. Валидации сверстана как в большинстве пакетов.
  • Возможность делать вложенные таблицы, присутствует xtype «Таблица».
  • Формируется и настраиваться форма очень быстро. Я очень много работаю и с MigxDb и c ContentBlocks, вы можете мне доверять в этом. Я знаю точно, о чем говорю.
Я сразу скажу, что в пакете присутствуют некоторые «неточности» — я сообщил в поддержку и по большинству вопросов мы нашли понимание. Выше я описываю концепцию и идею пакета. А детские болезни есть в любом пакете они со временем закрываются. Поэтому не вижу смысла иллюстрировать данный вопрос в публичной плоскости.

Как это выглядит на живом проекте.

Необходимо было сделать аккордеон с возможностью администрирования. И как он получился с помощью пакета PageBlocks



После установки пакета, у нас добавиться вкладка ко всем страницам в административной части. Но сначала не много о шаблонизации. Все мои блоки разбиты на две части это wrapper в котором у меня всегда предусмотрено три поля: Заголовок, текстовый блок сверху и текстовый блок снизу, а между двух текстовых блоков элементы. Давайте, откроем окно и посмотрим как это все работает.









Очень удобно и интуитивно правда? И мне то же очень понравилось. А ребята, которые контент заполняют вообще в восторге. Давайте посмотрим, как выглядит на фронте.



Вывод блоков на сайт

Выводится блоки с помощью сниппета pdoResourses давай те, я приведу пример вызова.

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

Но мне оказалась мало и я написал свой сниппет вывода блоков на сайт. С большим количеством нужным для меня параметров. Так как кода много я его публикую на gist и делюсь ссылкой.

Единственное, что я подключаю свой класс к классу пакета — так делать не хорошо. Поэтому я не описываю как установить его, а просто рассказываю, что он умеет.

Мы получили все то же самое, но появились параметры id,rid,up,return.

id — мы можем выбрать в сниппете конкретный «конструктор блоков» указав в параметре его ID.
rid — выборка блоков по ресурсу. Со следующими значениями. 0 — выгрузит все блоки не зависимости от ресурса. Если укажем значение — то получим все блоки по указанному ресурсу. Пусто — получим все блоки на странице на которой мы находимся.
up — Искать условия у родителей если, у текущего ресурса их нет. Может принимать значения 0|1. По умолчанию 0
return — можем менять результаты работы сниппета. chunk получить chunk, data — получить массив данных для работы в fenom, json — получить массив в формате json, file для работы со статическими файлами.

Хочу отдельно остановиться на параметре up. Придумал его разработчик @Prihod. Принцип мне так понравился, что я начал его использовать во всех сниппетах, которые я пищу (или практически во всех).

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

Что мы делаем?

  1. Заводим блок в конструкторе блоков ID 1
  2. Заполняем блоки на странице ресурса только в соответствующих категорий (2 ресурса, субкатегории не заполняем)
  3. Ну и вызываем сниппет который предоставлен выше

{'!PageBlocks' | snippet : [
    'id' => 1,
    'up' => 1
]}

Задачу мы выполнили и не нужно дублировать блоки или менять шаблоны, или еще делать какие-то параметры или еще чего-то…

Хочу сказать спасибо за такой шикарный пакет @Aleksandr Huz. Ты большой молодец!
Олег Щавелев
06 сентября 2021, 07:08
modx.pro
2
456
+11
Поблагодарить автора Отправить деньги

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

Aleksandr Huz
06 сентября 2021, 08:49
+2
Отличная статья! Спасибо и тебе Олег.
    Misha Bulic
    06 сентября 2021, 12:28
    +3
    Плюс. Отличный компонент, уже наполнил сайт со статьями (300 шт). Есть встроенная галерея. Готовые блоки отличная тема, Настроил и в пару кликов вставляешь блок и тут же его можно подредактировать.
    Не хватает:
    1. настройки визуального отображения в админке (когда блоков много, путаешься и не знаешь что внутри)
      Aleksandr Huz
      07 сентября 2021, 09:30
      0
      настройки визуального отображения в админке (когда блоков много, путаешься и не знаешь что внутри)
      Есть идеи как это должно выглядеть, картинки или какое-то доп. описание к блоку?
        Misha Bulic
        07 сентября 2021, 09:37
        0
        если бы я хоть немного представлял, что можно сделать с ExtJs(правильно?) то подсказал. В идеале конечно сделать что типа Gutenberg или editorjs.io/, но это уже слишком наверное, хотя было бы мега круто.
          Олег Щавелев
          07 сентября 2021, 09:47
          +1
          @Aleksandr Huz, я думаю, что ты перечислил все возможное. В пакете возможен набор ассоциативных иконок или изображений (причем исходники предоставлены) что бы разработчик мог как говориться (расширить и углубить) данное начинание. Поля в которых можно присвоить заголовок и краткое описание. Так же возможно сгруппировать элементам по группам. В выборе блока возможность выбрать вариант отображения блока.

          По сути есть два примера. Решение данное кейса (вопроса) ContentBlocks — скриншот. И ссылка на похожий пакет от YooTheme. Тут я дам ссылку. Не занимаюсь разработкой на Joomla — скриншота из системы.

          Доклад закончил)
            Misha Bulic
            07 сентября 2021, 10:26
            +1
            да, функционально почти все есть. не хватает только красивой обертки. Но её впихнуть будет не так просто. Нужно будет библиотеку готовых решений делать, и сообщество туда будет их добавлять
        Николай
        08 сентября 2021, 08:59
        +2
        Спасибо большое за полезный плагин!
          Максим
          09 сентября 2021, 13:00
          0
          Напоминает MIGX, только более продвинутый.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            8