Yii2-shortcodes-pack

Выкладываем свои наработки
Ответить
Loveorigami
Сообщения: 694
Зарегистрирован: 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
Сообщения: 694
Зарегистрирован: 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
Сообщения: 694
Зарегистрирован: 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
Сообщения: 694
Зарегистрирован: 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
Сообщения: 188
Зарегистрирован: 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
Сообщения: 694
Зарегистрирован: 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

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей