Hello, i started using yii a few days ago and i ran into a problem. I can’t figure out how to get my CListView to update with ajax. I searched the forum and the internet for solutions, and i got a few things, but my code is still not working properly.
index view code:
<div id="latestAdsContainerBottomAds">
<?php $this->_getListViewAds(); ?>
</div>
<div id="latestAdsContainerBottomAdsPaginate">
<?php $this->widget('CLinkPager', array(
'pages' => $pages,
'header'=>'',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'footer'=>'</center>',
'id'=>'link_pager'
))
?>
</div>
<script>
$('ul.yiiPager a').click(function(ev){
ev.preventDefault();
$.get(this.href,{ajax:true},function(html){
$('#latestAdsContainerBottomAds').html(html);
});
});
</script>
_index_paging_view view code:
[code]
<?php
$this->widget('zii.widgets.CListView', array(
'id' => 'Ads',
'dataProvider' => $dataProvider,
'itemView' => '_view',
'enablePagination'=>false,
'pagerCssClass' => 'result-list',
'summaryText' => '',
));
?>
SiteController controller code:
public function actionIndex()
{
//get criteria
$criteria = new CDbCriteria();
$criteria->condition = 'typeID = :type';
$criteria->params = array (':type'=> Ads::$selectedType);
$criteria->order = 'id desc';
//get count
$count = Ads::model()->count($criteria);
//pagination
$pages = new CPagination($count);
$pages->setPageSize(4);
$pages->applyLimit($criteria);
//result to show on page
$result = Ads::model()->findAll($criteria);
$dataProvider = new CArrayDataProvider($result);
$this->render('index', array(
'dataProvider' => $dataProvider,
'pages' => $pages
));
}
public function _getListViewAds(){
//get criteria
$criteria = new CDbCriteria();
$criteria->condition = 'typeID = :type';
$criteria->params = array (':type'=> 1);
$criteria->order = 'id desc';
//get count
$count = Ads::model()->count($criteria);
//pagination
$pages = new CPagination($count);
$pages->setPageSize(4);
//$thePage = $pages->getCurrentPage();
//$pages->setCurrentPage($thePage+1);
$pages->applyLimit($criteria);
//result to show on page
$result = Ads::model()->findAll($criteria);
$dataProvider = new CArrayDataProvider($result);
$this->renderPartial('_index_paging_view', array(
'dataProvider' => $dataProvider,
'pages' => $pages
));
}
This way i get the first 4(1-4) results, and i can click next, i get the next 4(5-, but after that i still get the results 5-8. I used firebug and i saw that page remains on page=2 on every next button click. I can click previous button and it gets me the first 4(1-4) results again. So it seems like that it is working for 1 next and 1 prev button click. I think i should change the CPagination currentPage variable in the controller. I tried a way: //$thePage = $pages->getCurrentPage(); //$pages->setCurrentPage($thePage+1); , but it’s not working.
Maybe i have a problem with my MVC system, i’m new to this too.
Hope someone can help me out,
Cheers