Yii2-shortcodes-pack

Выкладываем свои наработки
Loveorigami
Сообщения: 751
Зарегистрирован: 2014.08.27, 21:54

Yii2-shortcodes-pack

Сообщение Loveorigami » 2017.01.19, 14:14

Дорогие друзья.
Хочу Вам представить обновленный модуль Yii2-plugins-system, a также его логическое дополнение Yii2-shortcodes-pack
https://github.com/loveorigami/yii2-shortcodes-pack.

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

Другими словами, у Вас есть виджет галереи. Вы хотите ее вывести в контенте. В пару действий создаете шорткод с настройками виджета. Помещаете в папку и устанавливаете в систему. Вот и все. Можно пользоваться.

Изображение
Последний раз редактировалось Loveorigami 2017.01.19, 15:38, всего редактировалось 2 раза.

Loveorigami
Сообщения: 751
Зарегистрирован: 2014.08.27, 21:54

Re: Yii2-shortcodes-pack

Сообщение Loveorigami » 2017.01.19, 14:32

Как работает модуль?
  • Перепробовав различные способы рендера шорткодов, цепляясь за стандартные события фреймворка, сталкивался с проблемами большого количества событий или не возможности дозагрузить ассеты во время рендера. Подробнее - тут
    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 раз.

Loveorigami
Сообщения: 751
Зарегистрирован: 2014.08.27, 21:54

Re: Yii2-shortcodes-pack

Сообщение Loveorigami » 2017.01.19, 14:44

Как создать свой шорткод?
Допустим, у нас есть виджет галереи

Код: Выделить всё


/**
 * 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;
    }
}

Создаем класс шорткода GalleryShortcode, который помещаем в папку, указанную в настройках (например - @common/shortcodes)

Код: Выделить всё

/**
 * 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 раза.

Loveorigami
Сообщения: 751
Зарегистрирован: 2014.08.27, 21:54

Re: Yii2-shortcodes-pack

Сообщение Loveorigami » 2017.01.19, 14:53

Ну и в качестве еще одного примера - рендер вложенных шорткодов на примере табов.
Легко это парсится с такой структурой

Код: Выделить всё

/*--------------
[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]
---------------*/
В результате парсер внутреннего шорткода я перенес в сам виджет для того, чтобы сформировать список $items уже для стандартного виджета yii\bootstrap\Tabs.
https://github.com/loveorigami/yii2-sho ... s/Tabs.php

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

Спасибо всем за внимание.

Аватара пользователя
rodion_zlobin
Сообщения: 206
Зарегистрирован: 2017.01.11, 16:33

Re: Yii2-shortcodes-pack

Сообщение rodion_zlobin » 2017.01.19, 19:04

Замечательная штука, спасибо!)

delfi
Сообщения: 19
Зарегистрирован: 2012.07.19, 07:20

Re: Yii2-shortcodes-pack

Сообщение delfi » 2017.01.20, 11:28

Спасибо, полезно будет

Loveorigami
Сообщения: 751
Зарегистрирован: 2014.08.27, 21:54

Re: Yii2-shortcodes-pack

Сообщение Loveorigami » 2017.09.12, 17:36

Добавил шорткод аккордеона (понадобился в одном из проектов)
https://github.com/loveorigami/yii2-sho ... es/tag/1.2

nickdenry
Сообщения: 87
Зарегистрирован: 2015.10.28, 04:55

Re: Yii2-shortcodes-pack

Сообщение nickdenry » 2018.03.26, 05:20

Волшебно. В CMS это называется, как правило, токенами.
Ответственные программисты с высоким уровнем технического долга (c)

Alex11111
Сообщения: 7
Зарегистрирован: 2018.03.29, 21:43

Re: Yii2-shortcodes-pack

Сообщение Alex11111 » 2018.03.29, 21:49

А где нибудь есть инструкция по использованию этого модуля?
Не совсем понятно что делать после установки. В стандартном контроллере ("backend/controllers") вывожу
return $this->render('index', ['data'=>'[label]Label[/label]']);
На странице так и выводится: [label]Label[/label]

nickdenry
Сообщения: 87
Зарегистрирован: 2015.10.28, 04:55

Re: Yii2-shortcodes-pack

Сообщение nickdenry » 2018.03.30, 14:26

Alex11111 писал(а):
2018.03.29, 21:49
А где нибудь есть инструкция по использованию этого модуля?
Сначала настроить https://github.com/loveorigami/yii2-plugins-system
Ответственные программисты с высоким уровнем технического долга (c)

Alex11111
Сообщения: 7
Зарегистрирован: 2018.03.29, 21:43

Re: Yii2-shortcodes-pack

Сообщение Alex11111 » 2018.03.31, 10:05

nickdenry писал(а):
2018.03.30, 14:26
Alex11111 писал(а):
2018.03.29, 21:49
А где нибудь есть инструкция по использованию этого модуля?
Сначала настроить 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.

Всё равно не выводит как надо. Что я мог еще упустить?

Loveorigami
Сообщения: 751
Зарегистрирован: 2014.08.27, 21:54

Re: Yii2-shortcodes-pack

Сообщение Loveorigami » 2018.03.31, 11:22

На вкадке с планинами включен плагин с шорткодами.?
Его также нужно перевести в бакенд.

Alex11111
Сообщения: 7
Зарегистрирован: 2018.03.29, 21:43

Re: Yii2-shortcodes-pack

Сообщение Alex11111 » 2018.04.01, 12:22

Если речь идёт о вкладке Sortcodes, то - да, плагин переведён в бекенд, скриншот был выше
В если о вкладке Plugins, то у меня нет возможности выбирать там приложение http://joxi.ru/Grql4D7UNZqL8A

Loveorigami
Сообщения: 751
Зарегистрирован: 2014.08.27, 21:54

Re: Yii2-shortcodes-pack

Сообщение Loveorigami » 2018.04.01, 15:17

Включите 6 и 7

Alex11111
Сообщения: 7
Зарегистрирован: 2018.03.29, 21:43

Re: Yii2-shortcodes-pack

Сообщение Alex11111 » 2018.04.01, 16:19

Включил, не помогло, мне кажется что у меня модуль не отслеживает функцию render, поэтому и выводит как есть

Loveorigami
Сообщения: 751
Зарегистрирован: 2014.08.27, 21:54

Re: Yii2-shortcodes-pack

Сообщение Loveorigami » 2018.04.01, 18:37

Этот модуль задумывался как вставка шорткодов для фронтенда с возможностью управлять из бакенда. Если Вам захотелось рендерить шорткоды в бакенде (зачем?), тогда и настроить бакенд вы должны по аналогии с фронтендом (из документации).

Т.е. добавить в конфиг бакенда

Код: Выделить всё

...
'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,
    ]
    ...
]

Подозреваю, что тогда шорткоды отрендерятся и в гриде. Вам тогда нужно будет добавить в shortcodesIgnoreBlocks Id своего грида.

Alex11111
Сообщения: 7
Зарегистрирован: 2018.03.29, 21:43

Re: Yii2-shortcodes-pack

Сообщение Alex11111 » 2018.04.02, 09:37

Опять не сработало :(
Этот функционал нужен в админке, для простого наполнения контентом, как шорткоды 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,
        ],
        ...
   ]

Loveorigami
Сообщения: 751
Зарегистрирован: 2014.08.27, 21:54

Re: Yii2-shortcodes-pack

Сообщение Loveorigami » 2018.04.02, 20:33

Завтра открою проект, где у меня установлен этот модуль, посмотрю, что к чему.

Alex11111
Сообщения: 7
Зарегистрирован: 2018.03.29, 21:43

Re: Yii2-shortcodes-pack

Сообщение Alex11111 » 2018.04.03, 09:39

Спасибо)

Loveorigami
Сообщения: 751
Зарегистрирован: 2014.08.27, 21:54

Re: Yii2-shortcodes-pack

Сообщение Loveorigami » 2018.04.03, 11:04

У меня точно такие же настройки.
Изображение

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

Единственное, что, после правки конфига я очистил кеш.

Ответить