Loadырь, изучение php для админов и не нужно. Как я уже писал выше, скорее всего я очень плохо изъяснился, и никто посыла толком и не понял. Рассмотрев систему со всех сторон, я уже понял что одним компонентом тут не обойтись — и вероятнее всего нужно делать отдельный шаблон. Полностью независимый от модерна
Pechora.Dev 🐻
так а не лучше тогда дать возможность создавать свой шаблон через админку, но стандартным синтаксисом?)
Про какой стандарт идет речь?
Итак, просто покажу что уже есть и как это работает.
Для начала компонент добавляет в настройки типа контента новые опции:
Сейчас, вывод новостей выглядит так:
Напишем простой шаблон, используя шорткоды компонента:

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

Итог: используя шорткоды компонента мы прямо из админки создали самый примитивный список для контента, используя простые шорткоды. Конечно, сейчас это еще даже не демо, а лишь небольшой набросок, чтобы показать, как это может работать.
Как только будет готова первая версия для теста, выложу в блог.
лучше, чем
Тем, что делаем мы это прямо из АП, без необходимости создавать шаблон в нужной директории виджета/поля/шаблона контроллера
Короче, как на ДЛЕ.
Вообще нет. Эх, видать не моя фишка понятно объяснять суть идей 😆
Fuze, в том-то и дело, что шаблон писать и не нужно. Скажем как я это вижу. На примере виджета меню (прям очень приблизительно). Пишем наипростецкий виджет, в котором всего две опции (родной виджет для обработки и шаблон виджета). Выбираем в первом списке «Меню», а в шаблоне пишем что-то вроде этого:
<nav class="nav [nav-class]"> <ul> [menu=menu_name return=array] [foreach:menu_items] <li class="[is-active]active[/is-active] [nav-li-class]"> <a href="[url]"> [title] [icon-solid:envelope] </a> [if:children] <ul class="sub-menu"> [foreach:children] <li class="sub [nav-li-class] [is-active]active[/is-active]"> <a href="[url]">[title]</a> [if:children] <ul class="sub-sub-menu"> [foreach:children] <li class="sub [nav-li-class] [is-active]active[/is-active]"> <a href="[url]">[title]</a> </li> [/foreach] </ul> [/if] </li> [/foreach] </ul> [/if] </li> [/foreach] </ul> </nav>
Сохраняем на позиции сетки. Содержимое поля «шаблон виджета» пишется в базу как есть — вместе с шорктодами (аля простой html), а вот уже дальше система обрабатывает эти шорткоды так как нужно. Понятно, что конструкция [foreach:menu_items]...[foreach] должна обработаться так:
<?php foreach ($items as $item) { ?>...<?php } ?>
Вообще, у меня есть понимание как это должно работать. И инструмент больше для разработчиков, нежели для рядовых пользователей. Я видел и знаю CMS, где это очень хорошо реализовано.
Поэтому прошу сильно не пинать — это всего лишь пока мысль, даже не имеющая рабочего прототипа. И, как говорится — «Идея с балконами пришла уже после строительства дома»
Fuze, шаблонизатор наверное нет. Просто при помощи регулярок описать шорткоды. Просто их получится очень много. У любого поля могут быть кучи дополнительных параметров, помимо самого значения. Поэтому задача для меня интересная, сейчас думаю, как бы это лучше все организовать. Однажды я такое делал, но для собственной мини-cms, там ядро и классы знал вдоль и поперек. В данном же случае придется прямо погружаться в изучение всех методов.
но думаю, какая-то минимальная версия будет скоро готова, хотя бы которая будет просто рендерить значения полей на фронте.
Добрый день! Работая с InstantCms, столкнулся с тем, что если что-то нужно разрабатывать в дизайн сайта (список записей типа контента например), приходится либо создавать свой шаблон, либо править уже имеющиеся.
И на ум пришла идея создать компонент, который позволял бы при создании или редактировании типа контента самостоятельно создавать структуру списка и отдельной записи. Например вот так:
[addcss="my-list"] [addjs="my-list"] <section class = "my-list"> [ctype] <div class = "list-item-[ctype-name]"> <h3>[ctype-field-title]</h3> <p>[ctype-field-content]</p> <a href = "[url]" class = "button-more">Читать</a> </div> [/ctype] </section>
Суть проста — шорткоды обрабатываются как отдельные конструкции или элементы. Например шорткод [ctype-field-title] выведет значение поля «Заголовок».
Данная система позволит без труда разрабатывать дизайны списков, записей, списка пользователей и так далее. Впрочем — почти все, что есть в виджетах также.
В связи с этим провожу опрос. Вероятнее всего, на этой уйдет время, но уверен, найдет отклик среди тех, кто разрабатывает много и часто.
Предвидя возможные вопросы скажу сразу — нет, это не wysywig редактор. Да, html как минимум знать нужно.
ruccich, кеширование однако
Что-то не так?
Да вроде работает

Михаил, это не баг, а ожидаемое поведение системы. Можете добавить проверку на админку в вашем хелпере:
function html_input($type = 'text', $name = '', $value = '', $attributes = []) { $attributes['autocomplete'] = 'off'; } $attributes['type'] = $type; $attributes['name'] = $name; $attributes['value'] = $value; // Если это админка - возвращаем стандартные классы if (cmsCore::getInstance()->uri_controller == 'admin') { return html_tag_short('input', $attributes, 'input form-control'); } // Для фронтенда - просто кастомные классы return html_tag_short('input', $attributes, 'my-custom-class'); }
Решение такое себе, но я почему-то подозреваю, что в тему admincoreui тоже нужно класть хэлпер. Могу ошибаться.
Михаил, сделайте копию виджета с другим системным именем, и вносите в нем какие угодно правки
Михаил, чтобы добавить поле, в файле опций options.form.php
new fieldТипПоля('options:имя_поля', [ 'title' => 'Заголовок поля' ]),
Где ТипПоля — например string или number, а имя_поля — системное имя для использования в шаблоне.
А так в целом вообще неясно, какую цель вы преследуете 😀
Def, показывается. Попробуйте на хостинге затестить, так как на локальном все за секунду загружается. )))

Сортировка в премиум-версии.
Здорово!) А как имена файлам задавать, чтобы на сайте выводились понятные названия?) И если файл назван киррилицей, то может ли сразу в имя поставлять именно коррилицу?)
Такую опцию я уже сделал:

Возможность переименования файлов тоже готова — можно переименовывать как латиницу в кириллицу так и наоборот. А так по умолчанию, если не отмечена опция «Сохранять оригинальные названия файлов» то файл с именем Документ.pdf при загрузке превращается в document.pdf

