Виджет или просто представление

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
alexbra
Сообщения: 12
Зарегистрирован: 2012.01.30, 18:50

Виджет или просто представление

Сообщение alexbra »

Здравствуйте.
Изучаю Yii - переписываю небольшой проект личной страницы, сделанный на Joomla.

Столкнулся, возможно, с ламерским вопросом:
Когда следует использовать виджет, а когда писать код прям в представлении и контроллере?
Как это сделать "философски" правильнее

Вот конкретная ситуация
- есть главная страница. На ней 4 основных блока информации: об авторе, последние новости, случаные фото, и видеоплейер.
- написал для видеоплейера с плейлистом кастомный виджет используя API Google.

Виджет привлекает меня в уменьшении кода в представлении site/index - одна строчка вывода виджета в нужном DIV-е

Спасибо за ответ
voshum
Сообщения: 40
Зарегистрирован: 2011.03.21, 17:43

Re: Виджет или просто представление

Сообщение voshum »

Виджеты обычно встраивают в скрипт представления для генерации некоторой сложной, но в то же время самостоятельной части пользовательского интерфейса. К примеру, виджет календаря может быть использован для рендеринга сложного интерфейса календаря. Виджеты позволяют повторно использовать код пользовательского интерфейса.
Я бы конкретно для твоего примера сделал бы все виджетами, ну только лишь наверно блок "Об авторе" я бы написал просто на html, хотя если данные будут меняться то можно и его вынести в виджет.

А вообще философию не знаю, но для себя решил, что если какая-то часть кода в представлении будет использоваться часто и требует реализации какой-то логики, то выношу его в виджет. Ну это конечно не относится к таким моментам типо как

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

<?php if(!empty($var)): ?>
<p><?php echo $var; ?></p>
<?php endif;?>
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Виджет или просто представление

Сообщение slavcodev »

виджет - если код повторяется в разных представлениях, хотя если в разных представлениях одного контроллера, можно вынести просто в отдельное представление и подключать через renderPartial в основном
виджет - если есть для рендера придется работать с моделями или другими компонентами
виджет - если рендерится кусок html не зависящий к текущеу проекту, и при переносе в другой проект не нужно будет править виджет
Жду Yii 3!
Аватара пользователя
andy_s
Сообщения: 127
Зарегистрирован: 2012.01.22, 13:15

Re: Виджет или просто представление

Сообщение andy_s »

Чтобы сделать "философски правильнее", нужно держать в голове принцип отделения логики от представления. Виджет наследует базовый класс контроллера не просто так. Внутри виджета можно также разместить какую-то логику, извлечь из базы модели, передать их в представление виджета. Можно всего этого добиться, используя и метод CController.renderPartial(), но тогда будет нарушен принцип MVC. Поэтому renderPartial() подходит только как часть представления, не содержащая никакой сложной логики, но которая может содержать разные виджеты.

И ещё одно важное замечение. Хоть я и сказал, что виджет - это миниконтроллер, но нужно помнить, что он отвечает только за вывод информации. Никаких $_POST/$_GET обработок, редиректов и т.д., иначе наживёте себе много проблем :)
alexbra
Сообщения: 12
Зарегистрирован: 2012.01.30, 18:50

Re: Виджет или просто представление

Сообщение alexbra »

Прихожу к выводу, что нужен виджет.
У меня идет запрос с условием к модели Video, в которой хранятся ссылки на видео с ютуба.
Здесь же рендер, подключение трех js файлов и двух css
Думаю, доработать и можно в других приложениях тогда использовать.
Спасибо за подсказки.
Ответить