Компонент "Shortcodes Builder"

InstantCMS 2.X

Небольшое промо

Интересна была бы такая система построения дизайна?

Нет
Не понял что это и зачем...
Всего 5 голосов
#1 18 сентября 2025 в 17:18

Добрый день! Работая с InstantCms, столкнулся с тем, что если что-то нужно разрабатывать в дизайн сайта (список записей типа контента например), приходится либо создавать свой шаблон, либо править уже имеющиеся. 

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

  1. [addcss="my-list"]
  2. [addjs="my-list"]
  3. <section class = "my-list">
  4. [ctype]
  5. <div class = "list-item-[ctype-name]">
  6. <h3>[ctype-field-title]</h3>
  7. <p>[ctype-field-content]</p>
  8. <a href = "[url]" class = "button-more">Читать</a>
  9. </div>
  10. [/ctype]
  11. </section>

Суть проста — шорткоды обрабатываются как отдельные конструкции или элементы. Например шорткод [ctype-field-title] выведет значение поля «Заголовок». 

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

В связи с этим провожу опрос. Вероятнее всего, на этой уйдет время, но уверен, найдет отклик среди тех, кто разрабатывает много и часто. 

Предвидя возможные вопросы скажу сразу — нет, это не wysywig редактор. Да, html как минимум знать нужно. 

#2 18 сентября 2025 в 18:22

вопрос с дизайном вообще открыт по всем направлениям

#3 18 сентября 2025 в 19:38

компонент, который позволял бы при создании или редактировании типа контента самостоятельно создавать структуру списка и отдельной записи. Например вот так:

Pechora

Если всё равно создавать файл шаблона, то почему сразу не шаблон с PHP кодом, оверхэд же. Мне показалось, что вы хотите сделать шаблонизатор, которых полно и так: Twig, Blade, Smarty и т.п.

#4 18 сентября 2025 в 20:06

 Fuze, шаблонизатор наверное нет. Просто при помощи регулярок описать шорткоды. Просто их получится очень много. У любого поля могут быть кучи дополнительных параметров, помимо самого значения. Поэтому задача для меня интересная, сейчас думаю, как бы это лучше все организовать. Однажды я такое делал, но для собственной мини-cms, там ядро и классы знал вдоль и поперек. В данном же случае придется прямо погружаться в изучение всех методов. 

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

#5 18 сентября 2025 в 21:14

думаю, какая-то минимальная версия будет скоро готова

Pechora

Идея может быть полезна тем, кто хочет дать возможность изменять вывод контента операторам сайта (клиентам). Или тем, кто хочет оперативно через Админку что-то менять в простых шаблонах вывода.

Но нужна будет проверка ошибок для введённых шаблонов с дружественными описаниями и понятными подсказками. И хотя бы минимальная документация по уже реализованным возможностям. Желательна базовая цветовая подсветка вводимого кода. И хорошо бы иметь возможность хранить по несколько шаблонов для каждого типа контента и выбирать их из списка, а не править один единственный. Вы действительно хотите настолько заморочиться?

И сразу добавьте кеширование получившегося php-шаблона, а также удаление/изменение кешированного php-шаблона при изменении шорткодов. Это избавит от компиляции шорткодов при каждом запросе страницы.

Может быть Вам подойдёт вариант просто хранить в компоненте (в БД) php-шаблоны, а не изобретать свой мини-шаблонизатор со своим языком? Этого хватит, чтобы оперативно менять вывод контента через Админку, например. Вообще, сначала желательно определиться с целями такого компонента и для кого он будет предназначен, а уже потом думать, как проще и удобнее это реализовать.

#6 18 сентября 2025 в 21:43

Просто при помощи регулярок описать шорткоды. Просто их получится очень много.

Pechora

Ну такое себе имхо. Возьмите любой шаблонизатор, который побыстрее, хоть Smarty и всё. Циклы вы как будете делать? Я не то, чтобы отговариваю, делайте что вам нравится, просто смысл в велосипедах, да ещё и на регулярках. Кроме этого, в движке есть функции, которые парсят значения в фигурных скобках. Возможно вам пригодятся функции string_replace_keys_values(),  string_replace_keys_values_extended(), array_value_recursive().

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

Pechora

Я просто не очень понимаю цели этого действия, исходя из ваших вводных. Прибавить оверхеда, но в итоге шаблон то всё равно писать, только вместо <?php echo $ctype['name'] ?> писать [ctype-name]. Может проще сделать редактирование существующих шаблонов в админке?

#7 18 сентября 2025 в 22:37

 Fuze, в том-то и дело, что шаблон писать и не нужно. Скажем как я это вижу. На примере виджета меню (прям очень приблизительно). Пишем наипростецкий виджет, в котором всего две опции (родной виджет для обработки и шаблон виджета). Выбираем в первом списке «Меню», а в шаблоне пишем что-то вроде этого:

  1. <nav class="nav [nav-class]">
  2. <ul>
  3. [menu=menu_name return=array]
  4. [foreach:menu_items]
  5. <li class="[is-active]active[/is-active] [nav-li-class]">
  6. <a href="[url]">
  7. [title] [icon-solid:envelope]
  8. </a>
  9.  
  10. [if:children]
  11. <ul class="sub-menu">
  12. [foreach:children]
  13. <li class="sub [nav-li-class] [is-active]active[/is-active]">
  14. <a href="[url]">[title]</a>
  15.  
  16. [if:children]
  17. <ul class="sub-sub-menu">
  18. [foreach:children]
  19. <li class="sub [nav-li-class] [is-active]active[/is-active]">
  20. <a href="[url]">[title]</a>
  21. </li>
  22. [/foreach]
  23. </ul>
  24. [/if]
  25. </li>
  26. [/foreach]
  27. </ul>
  28. [/if]
  29. </li>
  30. [/foreach]
  31. </ul>
  32. </nav>

Сохраняем на позиции сетки. Содержимое поля «шаблон виджета» пишется в базу как есть — вместе с шорктодами (аля простой html), а вот уже дальше система обрабатывает эти шорткоды так как нужно. Понятно, что конструкция [foreach:menu_items]...[foreach] должна обработаться так:

  1. <?php foreach ($items as $item) { ?>...<?php } ?>

Вообще, у меня есть понимание как это должно работать. И инструмент больше для разработчиков, нежели для рядовых пользователей. Я видел и знаю CMS, где это очень хорошо реализовано. 

Поэтому прошу сильно не пинать — это всего лишь пока мысль, даже не имеющая рабочего прототипа. И, как говорится — «Идея с балконами пришла уже после строительства дома»

#8 18 сентября 2025 в 22:48

а в шаблоне пишем что-то вроде этого

Pechora

Так я про это и говорю :) Шаблон то всё равно писать.

Понятно, что конструкция [foreach:menu_items]...[foreach] должна обработаться так

Pechora

И поэтому и говорю, что проще использовать популярный шаблонизатор, чем известный только вам (вами сделанный) шаблонизатор.

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

Pechora

Поэтому я и отвечаю в этой теме. Разработчикам проще сделать шаблон.

Я видел и знаю CMS, где это очень хорошо реализовано. 

Pechora

Я тоже видел. Все используют существующие отточенные шаблонизаторы.

Поэтому прошу сильно не пинать

Pechora

Ни в коем случае, делайте что вам нравится и хочется. Я лишь озвучил своё мнение.

#9 18 сентября 2025 в 22:48

а в шаблоне пишем что-то вроде этого:

Pechora

Пока не понятно, зачем это всё нужно? Ради каких целей столько усилий? Может для их решения есть более эффективные способы?

И заодно поясните, пожалуйста, чем конструкция (да ещё и без подсветки кода)

  1. [ctype-name]

лучше, чем 

  1. <?php echo $ctype['name'] ?>

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

#10 18 сентября 2025 в 23:01

Короче, как на ДЛЕ.

#11 19 сентября 2025 в 01:10

лучше, чем 

Тем, что делаем мы это прямо из АП, без необходимости создавать шаблон в нужной директории виджета/поля/шаблона контроллера

Добавлено спустя 27 минут
Короче, как на ДЛЕ.
pupsik

Вообще нет. Эх, видать не моя фишка понятно объяснять суть идей 😆

#12 19 сентября 2025 в 18:56

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

#13 21 сентября 2025 в 14:51

Итак, просто покажу что уже есть и как это работает.

Для начала компонент добавляет в настройки типа контента новые опции:

Изображение

Сейчас, вывод новостей выглядит так:

Изображение

Напишем простой шаблон, используя шорткоды компонента:

Изображение

И посмотрим что получилось на сайте:

Изображение

Итог: используя шорткоды компонента мы прямо из админки создали самый примитивный список для контента, используя простые шорткоды. Конечно, сейчас это еще даже не демо, а лишь небольшой набросок, чтобы показать, как это может работать. 

Как только будет готова первая версия для теста, выложу в блог. 

#14 21 сентября 2025 в 19:57

так а не лучше тогда дать возможность создавать свой шаблон через админку, но стандартным синтаксисом?)

#15 21 сентября 2025 в 20:00
так а не лучше тогда дать возможность создавать свой шаблон через админку, но стандартным синтаксисом?)
Def

Про какой стандарт идет речь?

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожее в блогах

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.