Yii2-shortcodes-pack
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Yii2-shortcodes-pack
Дорогие друзья.
Хочу Вам представить обновленный модуль Yii2-plugins-system, a также его логическое дополнение Yii2-shortcodes-pack
https://github.com/loveorigami/yii2-shortcodes-pack.
Основной, и самой главной на мой взгляд возможностью данного релиза, является создание шорткодов с последующей их заменой на свои виджеты с дальнейшей настройкой в админке.
Другими словами, у Вас есть виджет галереи. Вы хотите ее вывести в контенте. В пару действий создаете шорткод с настройками виджета. Помещаете в папку и устанавливаете в систему. Вот и все. Можно пользоваться.
Хочу Вам представить обновленный модуль Yii2-plugins-system, a также его логическое дополнение Yii2-shortcodes-pack
https://github.com/loveorigami/yii2-shortcodes-pack.
Основной, и самой главной на мой взгляд возможностью данного релиза, является создание шорткодов с последующей их заменой на свои виджеты с дальнейшей настройкой в админке.
Другими словами, у Вас есть виджет галереи. Вы хотите ее вывести в контенте. В пару действий создаете шорткод с настройками виджета. Помещаете в папку и устанавливаете в систему. Вот и все. Можно пользоваться.
Последний раз редактировалось Loveorigami 2017.01.19, 15:38, всего редактировалось 2 раза.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-shortcodes-pack
Как работает модуль?
- Перепробовав различные способы рендера шорткодов, цепляясь за стандартные события фреймворка, сталкивался с проблемами большого количества событий или не возможности дозагрузить ассеты во время рендера. Подробнее - тут
viewtopic.php?f=27&t=42112 - Найдя точку входа для события работы с контентом, значительно изменилась и логика модуля. В результате чего шорткоды стали самостоятельной сущностью (своя таблица и настройки) и перекочевали в отдельный репозиторий.
Само событие можно глянуть здесь.
https://github.com/loveorigami/yii2-plu ... ew.php#L22 - Далее претерпел и механизм рендера шорткодов
- Цепляясь за новое событие View::EVENT_DO_BODY, проверяем наличие шорткодов в контенте.
- Если есть, делаем запрос, вытягиваем те, что присутствуют и активны в списке установленных. Т.е. таким образом - в системе мы можем установить сколь угодно шорткодов - было бы желание ).
- Строим парсер с настройками как у виджета.
- Чистим контент от игнорирумых блоков (спасибо samdark-у за подсказку). Делаем замену шорткода на виджет или closure.
- Проблема в WP - обработка вложенных шорткодов. Тут все делается автоматически. Отработанный шорткод помещается в pool, контент рекурсивно рендерится до самой последней замены (пробовал аж до 5 вложенностей - отрабатывается быстро и корректно).
- На выходе получаем html, как на примере выше.
- Итого - один запрос, рендер за одно событие
Последний раз редактировалось Loveorigami 2017.01.19, 15:40, всего редактировалось 5 раз.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-shortcodes-pack
Как создать свой шорткод?
Допустим, у нас есть виджет галереи
Создаем класс шорткода GalleryShortcode, который помещаем в папку, указанную в настройках (например - @common/shortcodes)
Вот и все. Инсталлируем этот плагин в админке. Активируем его. И можем вставлять галерею в контент.
Допустим, у нас есть виджет галереи
Код: Выделить всё
/**
* Class GalleryWidget
*/
class GalleryById extends Widget
{
public $cols = 6;
public $limit = 10;
public $id;
/**
* Render widget
* @return string
*/
public function run()
{
if ($this->id) {
$models = GalleryImages::find()->where(['gallery_id' => $this->id])->limit($this->limit)->published()->all();
return $this->render('index', [
'models' => $models,
'cols' => $this->cols,
]);
}
return null;
}
}
Код: Выделить всё
/**
* Plugin Name: Gallery
* Version: 1.7
* Plugin URI: https://github.com/loveorigami/lo-module-gallery/tree/master/plugins/gallery
* Description: A simple gallery plugin for use shortcode [gallery id=1]
* Author: Andrey Lukyanov
* Author URI: https://github.com/loveorigami/yii2-plugins-system
*/
class GalleryShortcodes extends BaseShortcode
{
public static function shortcodes()
{
return [
'gallery' => [
'callback'=> [GalleryById::class, 'widget'],
'tooltip' => '[gallery id=1]',
'config' => [
'cols' => 6,
'limit' => 60,
'id' => null
]
]
];
}
}
Последний раз редактировалось Loveorigami 2017.01.19, 22:13, всего редактировалось 2 раза.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-shortcodes-pack
Ну и в качестве еще одного примера - рендер вложенных шорткодов на примере табов.
Легко это парсится с такой структурой
Но мне захотелось максимально упростить разметку
В результате парсер внутреннего шорткода я перенес в сам виджет для того, чтобы сформировать список $items уже для стандартного виджета yii\bootstrap\Tabs.
https://github.com/loveorigami/yii2-sho ... s/Tabs.php
Данное решение может быть полезно, как пример для ваших шорткодов со сложной структурой.
Спасибо всем за внимание.
Легко это парсится с такой структурой
Код: Выделить всё
/*--------------
[bs_tabs]
[bs_thead]
[bs_tab href="#link" title="title"]
[bs_dropdown title="title"]
[bs_tab href="#link" title="title"]
[/bs_dropdown]
[/bs_thead]
[bs_tcontents]
[bs_tcontent id="link"]
[/bs_tcontent]
[/bs_tcontents]
[/bs_tabs]
---------------*/
Код: Выделить всё
/*--------------
[tabs]
[tab title="title1"] ... [/tab]
[tab title="title2" active=true] ... [/tab]
[tab title="title3"] ... [/tab]
[/tabs]
---------------*/
https://github.com/loveorigami/yii2-sho ... s/Tabs.php
Данное решение может быть полезно, как пример для ваших шорткодов со сложной структурой.
Спасибо всем за внимание.
- rodion_zlobin
- Сообщения: 207
- Зарегистрирован: 2017.01.11, 16:33
Re: Yii2-shortcodes-pack
Замечательная штука, спасибо!)
Re: Yii2-shortcodes-pack
Спасибо, полезно будет
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-shortcodes-pack
Добавил шорткод аккордеона (понадобился в одном из проектов)
https://github.com/loveorigami/yii2-sho ... es/tag/1.2
https://github.com/loveorigami/yii2-sho ... es/tag/1.2
Re: Yii2-shortcodes-pack
Волшебно. В CMS это называется, как правило, токенами.
Ответственные программисты с высоким уровнем технического долга (c)
Re: Yii2-shortcodes-pack
А где нибудь есть инструкция по использованию этого модуля?
Не совсем понятно что делать после установки. В стандартном контроллере ("backend/controllers") вывожу
return $this->render('index', ['data'=>'[label]Label[/label]']);
На странице так и выводится: [label]Label[/label]
Не совсем понятно что делать после установки. В стандартном контроллере ("backend/controllers") вывожу
return $this->render('index', ['data'=>'[label]Label[/label]']);
На странице так и выводится: [label]Label[/label]
Re: Yii2-shortcodes-pack
Сначала настроить https://github.com/loveorigami/yii2-plugins-system
Ответственные программисты с высоким уровнем технического долга (c)
Re: Yii2-shortcodes-pack
Спасибо за ответ)nickdenry писал(а): ↑2018.03.30, 14:26Сначала настроить https://github.com/loveorigami/yii2-plugins-system
Модуль настроил, в шорткоде label выставил приложение backend http://joxi.ru/p27ZQjBc0wj94m
Правда миграции второго модуля не применились:
php yii migrate/up --migrationPath=@vendor/loveorigami/yii2-plugins-system/migrations
No new migrations found. Your system is up-to-date.
Всё равно не выводит как надо. Что я мог еще упустить?
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-shortcodes-pack
На вкадке с планинами включен плагин с шорткодами.?
Его также нужно перевести в бакенд.
Его также нужно перевести в бакенд.
Re: Yii2-shortcodes-pack
Если речь идёт о вкладке Sortcodes, то - да, плагин переведён в бекенд, скриншот был выше
В если о вкладке Plugins, то у меня нет возможности выбирать там приложение http://joxi.ru/Grql4D7UNZqL8A
В если о вкладке Plugins, то у меня нет возможности выбирать там приложение http://joxi.ru/Grql4D7UNZqL8A
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-shortcodes-pack
Включил, не помогло, мне кажется что у меня модуль не отслеживает функцию render, поэтому и выводит как есть
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-shortcodes-pack
Этот модуль задумывался как вставка шорткодов для фронтенда с возможностью управлять из бакенда. Если Вам захотелось рендерить шорткоды в бакенде (зачем?), тогда и настроить бакенд вы должны по аналогии с фронтендом (из документации).
Т.е. добавить в конфиг бакенда
Подозреваю, что тогда шорткоды отрендерятся и в гриде. Вам тогда нужно будет добавить в shortcodesIgnoreBlocks Id своего грида.
Т.е. добавить в конфиг бакенда
Код: Выделить всё
...
'bootstrap' => ['log', 'plugins'],
...
'components' => [
'plugins' => [
'class' => lo\plugins\components\PluginsManager::class,
'appId' => 2
// by default
'enablePlugins' => true,
'shortcodesParse' => true,
'shortcodesIgnoreBlocks' => [
'<pre[^>]*>' => '<\/pre>',
//'<div class="content[^>]*>' => '<\/div>',
]
],
'view' => [
'class' => lo\plugins\components\View::class,
]
...
]
Re: Yii2-shortcodes-pack
Опять не сработало
Этот функционал нужен в админке, для простого наполнения контентом, как шорткоды drupal и wordpress. Аля тык на кнопочку и добавилась галерея или другая заготовка.
Фронтенд, у меня, разрабатывается отдельно на vuejs.
Вот мой конфиг
Этот функционал нужен в админке, для простого наполнения контентом, как шорткоды drupal и wordpress. Аля тык на кнопочку и добавилась галерея или другая заготовка.
Фронтенд, у меня, разрабатывается отдельно на vuejs.
Вот мой конфиг
Код: Выделить всё
...
'id' => 'app-backend',
'basePath' => dirname(__DIR__),
'controllerNamespace' => 'backend\controllers',
'bootstrap' => ['log', 'plugins'],
'modules' => [
'plugins' => [
'class' => 'lo\plugins\Module',
'pluginsDir' => [
'@lo/plugins/core', // default dir with core plugins
'@lo/shortcodes' // dir with shortcodes pack
// '@common/shortcodes', // dir with our plugins with shortcodes
]
],
],
'components' => [
'plugins' => [
'class' => lo\plugins\components\PluginsManager::class,
'appId' => 2,
// by default
'enablePlugins' => true,
'shortcodesParse' => true,
'shortcodesIgnoreBlocks' => [
'<pre[^>]*>' => '<\/pre>',
//'<div class="content[^>]*>' => '<\/div>',
]
],
'view' => [
'class' => lo\plugins\components\View::class,
],
...
]
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-shortcodes-pack
Завтра открою проект, где у меня установлен этот модуль, посмотрю, что к чему.
Re: Yii2-shortcodes-pack
Спасибо)
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Yii2-shortcodes-pack
У меня точно такие же настройки.
И в бакенде шорткоды нормально парсятся.
Единственное, что, после правки конфига я очистил кеш.
И в бакенде шорткоды нормально парсятся.
Единственное, что, после правки конфига я очистил кеш.