Let's say I have a model that represents products in a catalog. The model supplies the content provider (CActiveDataProvider
) to the view, which in turn uses it to display a grid (CGridView
).
What I need is a custom way to display this data: custom next/previous page links, custom data presentation. Something along these lines:
<div class="pagination">
<a class="arrows prev fl" href="#"><span class="icon"></span>back</a>
<a class="arrows next fr" href="#">forward <span class="icon"></span></a>
</div>
<ul class="some class">
<li class="item"><a href="#"><img src="image.jpg" width="100" height="200"/></a></li>
<li class="item"><a href="#"><img src="image.jpg" width="100" height="200"/></a></li>
<li class="item"><a href="#"><img src="image.jpg" width="100" height="200"/></a></li>
<li class="item"><a href="#"><img src="image.jpg" width="100" height="200"/></a></li>
<li class="item"><a href="#"><img src="image.jpg" width="100" height="200"/></a></li>
<li class="item"><a href="#"><img src="image.jpg" width="100" height="200"/></a></li>
</ul>
What is the best way to do this? So far, I am considering the following:
CGridView
, but somehow customize its output using parameters.CGridView
or even CBaseListView
and put in the formatting logic in it.Or maybe I am missing something here and there's a better way?
I ended up creating my own class to display this data as a descendant of CWidget
class. All the logic went into the run
method.
Bootstrap is good for displaying tabular data. I use Yii with Bootstrap to generate my own data display, simply because I don't like Yii's CGridView, even though it's convenient.
Your controller function might look something like this:
public function actionList($offset=0){
$model = new CatalogModel;
$data = $model->listCatalogsItems($offset);
$this->render('list',array(
'model'=>$data,
));
}
and your model like this
public function listCatalogItems($offset=0) {
$query = SELECT *
FROM catalog
WHERE <your conditions here> LIMIT 10 OFFSET " . $offset;
$items = Yii::app()->db->createCommand($query)
->queryAll();
return $items;
}
So with your next / previous page buttons, pass the OFFSET as a value in the url, ex http://yoursite.com/site/action/2
Hope that makes sense.