Иногда для отображения некоторых данных проще и быстрее использовать SQL запрос с возможностью вывода полученных результатов в CGridView. Вроде бы простая задача, но и здесь для новичка не все очевидно. Итак, для начала запишем в переменную наш запрос:
$sql = "select * from test_table";
Далее, выполним команду и получим весь массив данных:
$rows = Yii::app()->db->createCommand($sql)->queryAll();
Определим количество элементов:
$count = count($rows);
Используя CSqlDataProvider получаем массив пригодный для вывода в CGridView. Вместе с SQL запросом передаем массив с параметрами, где keyField — это уникальный идентификатор в таблице базы данных, в моем случае он имеет имя id и является инкрементом, totalItemCount — количество элементов, полученное ранее, pagination — это массив задающий параметры постраничной навигации, обычно необходим когда информации много, pageSize — количество элементов на 1 странице. В общем случае параметр pagination может быть опущен.
$SqldataProvider = new CSqlDataProvider($sql, array( 'keyField'=>'id', 'totalItemCount'=>$count, 'pagination'=>array( 'pageSize'=>100, ), ));
Ну и последний этап это собственно вывод таблицы с помощью компонента CGridView, который входит в стандартный пакет виджета zii фраймворка Yii.
$this->widget('zii.widgets.grid.CGridView', array( 'dataProvider'=>$SqldataProvider, 'enablePagination' => true, ));
В данном случае как dataProvider мы используем полученный ранее массив $SqldataProvider и параметром enablePagination со значением true включаем постраничную навигацию.
Ниже привожу весь листинг кода для вашего Yii представления.
$sql = "select * from test_table"; $rows = Yii::app()->db->createCommand($sql)->queryAll(); $count = count($rows); $SqldataProvider = new CSqlDataProvider($sql, array( 'keyField'=>'id', 'totalItemCount'=>$count, 'pagination'=>array( 'pageSize'=>100, ), )); $this->widget('zii.widgets.grid.CGridView', array( 'dataProvider'=>$SqldataProvider, 'enablePagination' => true, ));
В результате выполнения у вас должно получиться что-то подобное:
comments powered by HyperComments