В Вордпрессе есть замечательная штука — шорткоды, наверняка вы о них знаете. Почему бы нам не использовать шорткоды в Yii? Ведь это очень удобно и много где может пригодится. И это гораздо проще чем вы думаете 😉
Шорткоды в Yii
Начнём. Качаем расширение yii-shortcode и устанавливаем согласно инструкции. На всякий случай продублирую здесь:
- Распаковываем расширение в папку protected/extensions, в config/main.php прописываем:
// application components 'components'=>array( 'shortcode' => array( 'class' => 'ext.yii-shortcode.ShortCode', ), );
config/main.php
- В контроллере, который отвечает за вывод страниц (можно сделать и в родительском контроллере protected/components/controller.php), в методе init() надо зарегистрировать наши шорткоды:
/** * Метод, который выполняется перед инициализацией контроллера */ public function init() { $this->registerShortcodes(); return parent::init(); } /** * Регистрируем шорткоды */ private function registerShortcodes() { Yii::app()->shortcode->add_shortcode('tip', array($this, 'callbackTip')); } /** * Если шорткоды зарегистрированы, * этот метод будет заменять их вывод на вывод их обработчика * @param string $output Вывод, генерируемый текущим действием * @return string Вывод, генерируемый обработчиком шорткода */ public function processOutput($output) { $output = Yii::app()->shortcode->parse($output); return parent::processOutput($output); }
protected/components/controller.php
Здесь я создал приватный метод, в котором регистрируются шорткоды и вызвал его в методе init(). А также переопределил метод processOutput(). Надеюсь тут всё понятно)
- Реализуем метод-обработчик шорткода «tip». Я забыл сказать, этот шорткод будет выводить текст в div’e с заданным цветом.
/** * Обработчик шорткода [tip color="green"]Content[/tip] * @param array $atts Массив аттрибутов, ключ - название атрибута, * значение - значение по-умолчанию * @param string $content Содержание шорткода * (всё, что между открывающим и закрывающим тегом) * @return string Вывод, генерируесый шорткодом */ function callbackTip($atts, $content) { extract( Yii::app()->shortcode->shortcode_atts( array( 'bgcolor' => '#fcfcd9', ), $atts ) ); return '<div class="tip" style="background:'.$bgcolor.';">' . $content . '</div>'; }
protected/components/controller.php
Самое время проверить!
Пишем в какой-нибудь статье, которая выводится с помощью контроллера наш шорткод:
Сохраняем, и смотрим на результат:
Всё получилось! Как видите, ничего сложного 😉 Конечно, можно задать стили для класса «tip», и ещё что-нибудь придумать с параметрами, но наша задача заключалась в том, чтобы научиться использовать шорткоды в Yii и мы это сделали!
Ссылка на скачивание в статье не рабочая.
Актуальные ссылки:
Официальная статья по компоненту yii-shortcode): http://www.yiiframework.com/extension/yii-shortcode/
В ней ссылка на файл: http://www.yiiframework.com/ext/files/?id=1536
Ну и прямая ссылка на файл: http://www.yiiframework.com/extension/yii-shortcode/files/yii-shortcode-1.0.zip
Благодарю, поправил.