При изучении Yii на практике, в процессе переноса действующего проекта нашей компании: сервиса nezabud-ka.ru,
я столкнулся с рядом проблем, в частности с тем что модули в Yii не встраиваются в позиции шаблона и не выводятся в нужных местах страницы, как например в Joomla.
В Yii все оказалось похожим на Drupal, а именно модули имели собственный путь URL и под-страницы, как целый компонент в Joomla.
Такой вариант мне не подходил, т.к требовалось в общем шаблоне на главной странице сервиса, выводить блок с определенными данными о статистике сервиса, и не только на главной…
Такая задача в Joomla всегда решалась элементарно через написание модуля.
Выход в написании кучи условий в шаблоне, а также всего кода который бы выполнял SQL выборку и выводил в статистику,
также был не приемлем из-за того что это будет захламлять весь код,
что в дальнейшем усложнить его поддержку.
Озадачившись данным вопросом, в документации о Yii в разделе Создание расширений,
я обнаружил просто шикарный способ решения своей задачи — Виджет.
Данный тип расширения одновременно сочетает в себе преимущества плагинов и модулей которые есть в joomla!
Простейший виджет в Yii состоит из двух файлов: файла самого виджета и файла с представлением.
Файл с классом виджета, должен находится по такому пути protected/components/StatWidget.php
А файл с представлением protected/components/views/stat.php
Класc виджета в моем случае будет содержать следующий код, выборкой из БД и пр.:
class StatWidget extends CWidget { public $params = array( 'uid'=>null, 'users'=>0, 'eventsall'=>0, 'eventsday'=>0 ); public function run() { $row = Yii::app()->db->createCommand() ->select('COUNT(id) AS eventsall, (SELECT COUNT(id) FROM tbl_users) AS users, (SELECT COUNT(id) FROM tbl_events WHERE created >= \''.date('Y-m-d').' 00:00:00\') AS eventsday') ->from('tbl_events') ->queryAll(); $this->params['users'] = $row[0]['users']; $this->params['eventsall'] = $row[0]['eventsall']; $this->params['eventsday'] = $row[0]['eventsday']; $this->render('stat', array('params' => $this->params)); } } |
Где в функцию render передается имя файла представления — stat
Файл представления виджета содержит в себе разметку и вывод данных:
- Статистика
- Пользователей:
- Добавлено событий:
- Событий сегодня:
Выводится виджет ф шаблоне темы, в любом месте!
Выглядит это так:
$this->widget('StatWidget',array('params'=>array( 'uid' => Yii::app()->user->id, ))); |
Где ‘uid’ => Yii::app()->user->id , это передача параметров в виджет, которая дает вожможность влиять на работу виджета в челом.
Вобщем виджеты в Yii порадовали!
Добавить комментарий