melomaniac
(Melomaniac2012)
November 9, 2013, 7:32pm
1
Всем добрый вечер. Те кто знаком с Wordpress наверняка сталкивались с такой вещью как шорткоды.
Т.е. вставляем на любой странице подобный шорткод [contact] получаем форму обратной связи к примеру.
Подскажите пожалуйста куда копать чтобы реализовать подобное в Yii
melomaniac
(Melomaniac2012)
November 9, 2013, 7:38pm
2
melomaniac:
Всем добрый вечер. Те кто знаком с Wordpress наверняка сталкивались с такой вещью как шорткоды.
Т.е. вставляем на любой странице подобный шорткод [contact] получаем форму обратной связи к примеру.
Подскажите пожалуйста куда копать чтобы реализовать подобное в Yii
Я так понимаю в основе лежит не что иное как WYSIWYG BBcode ?
Я бы так делал:
Предположим, у нас есть контроллер, выводящий страницы сайта. Назовем его PageController.
Внутри контроллера определен экшн actionDetail($slug), выводящий содержимое страницы.
Основной текст у нас пускай лежит в поле description модели Page.
В модели Page определяем геттер
public function getAdvancedDescription()
{
return какой_нибудь_обработчик($this->description);
}
Функция какой_нибудь_обработчик() занимается тем, что заменяет шорткоды на результат выполнения некоего модуля.
На роль некоего модуля лучше всего, полагаю, подходят виджеты.
Иными словами, нашли в тексте "[contact]", заменили его на результат выполнения ContactWidget (или на пустое место, если что-то пошло не так)
А виджеты хороши тем, что у них и логика есть, и представление.
А, забыл уточнить-то. Геттер getAdvancedDescription нужен для того, чтобы не париться всякий раз, когда нужно вывести страницу вместе с модулями на ней. Во вьюхе делаем тупо <?= $page->advancedDescription ?>, дальше оно уже само.
melomaniac
(Melomaniac2012)
November 9, 2013, 7:54pm
5
Я бы так делал:
Предположим, у нас есть контроллер, выводящий страницы сайта. Назовем его PageController.
Внутри контроллера определен экшн actionDetail($slug), выводящий содержимое страницы.
Основной текст у нас пускай лежит в поле description модели Page.
В модели Page определяем геттер
public function getAdvancedDescription()
{
return какой_нибудь_обработчик($this->description);
}
Функция какой_нибудь_обработчик() занимается тем, что заменяет шорткоды на результат выполнения некоего модуля.
На роль некоего модуля лучше всего, полагаю, подходят виджеты.
Иными словами, нашли в тексте "[contact]", заменили его на результат выполнения ContactWidget (или на пустое место, если что-то пошло не так)
А виджеты хороши тем, что у них и логика есть, и представление.
Спасибо, попробую, интересный вариант