Zshorts шорткоды

InstantCMS 2.X
#1 13 июля 2022 в 15:49

Тема несколько раз поднималась, но на форуме решений не было. Сел и начал делать свой «велосипед» для использования шорткодов в записях типов контента.

О том, что получается, ниже.

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

Как это работает для пользователя

Над полем редактора есть кнопка использовать шорткоды

Изображение

нажатие на которую открывает окно с тремя списками: доступными шоркодами, теми, что уже есть в статье, и последними добавленными

Изображение

Кликом по шорткоду можно перейти к его добавлению или редактированию

Изображение

Кликом по отмеченному название шорткода будет скопировано в буфер. И его можно использовать в поле редактора.

Вот так выглядит в редакторе пример с демо

Изображение

А что под капотом

Целью было максимально простое добавление новых типов шорткодов. На данный момент для добавления шорткода нужны два файла. Файл формы, в которой пользователь указывает данные, и файл шаблона, в котором эти данные выводятся. 

Файл шаблона

  1. <?php
  2. /**
  3.  * Template Name: Цитата
  4.  * Template Type: html
  5.  */
  6. $this->addControllerCSS('quote-f', 'zshorts');
  7. ?>
  8. <div class="pageblock">
  9. <div class="zshort-quote">
  10. <blockquote>
  11. <div class="row">
  12. <?php if(!empty($img)){ ?>
  13. <div class="col-sm-3 text-center">
  14. <?php echo html_image($img, 'small', '', ['class' => 'rounded-circle']); ?>
  15. </div>
  16. <?php } ?>
  17. <div class="col-sm-9">
  18. <?php
  19. if (!isset($text) && $is_html_filter) {
  20. $text = cmsEventsManager::hook('html_filter', [
  21. 'text' => $text,
  22. 'build_redirect_link' => (bool) $build_redirect_link
  23. ]);
  24. }
  25. echo $text;
  26. ?>
  27. <small>&mdash; <?php html($author); ?></small>
  28. </div>
  29. </div>
  30. </blockquote>
  31. </div>
  32. </div>

Файл формы

  1. <?php
  2.  
  3. class formZshortsQuote extends cmsForm {
  4.  
  5. public function init() {
  6.  
  7. return array(
  8. 'type' => 'fieldset',
  9. 'childs' => array(
  10. new fieldImage('img', [
  11. 'title' => 'Фото автора цитаты',
  12. 'options' => [
  13. 'sizes' => ['small']
  14. ]
  15. ]),
  16. new fieldString('author', [
  17. 'title' => 'Автор цитаты',
  18. 'rules' => [
  19. ['required']
  20. ]
  21. ]),
  22. new fieldHtml('text', [
  23. 'title' => 'Текст цитаты',
  24. 'rules' => [
  25. ['required']
  26. ]
  27. ])
  28. )
  29. )
  30. );
  31.  
  32. }
  33.  
  34. }

В базе данных хранятся только уже заполненные шорткоды.

В списке записей, если включена опция обрезки, шорты будут удалены из текста. Также они удаляются, чтобы не засорять СЕО-опции.

Что было бы неплохо сделать

В текущем виде компонент меня устраивает полностью, в плане использовать его для лендингов, в статьях, как редактора.

Но чтобы пустить в массы...

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

Какие мысли возникли у вас, после прочтения?

#2 13 июля 2022 в 16:24

Интересная задумка. В свое время привык к шорткодам в WP.

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

#3 19 июля 2022 в 09:01

Здорово. Можно сделать шорткодом вывод произвольного html кода. Иногда требуется выводить графики и иногда этих графиков несколько на статью, вот в этом случае использование шорткодов в нескольких местах статьи сильно бы помогло.

#4 25 декабря 2022 в 01:24

А будет сделан такой компонент для продвижения в массы? 

#5 26 декабря 2022 в 08:50

Вернул демо «к жизни»

 Саня, в ближайшем будущем видимо нет. Отклик минимальный, пока делаю проекты под ключ.

#6 15 мая 2023 в 08:29

Подскажите пожалуйста как это реализовать у себя на сайте, какие файлы нужно создать и в какой директории ? 

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