更新后,Yii CListView选择最后一页

时间:2013-05-31 16:05:34

标签: jquery ajax yii comments

我有一个问题。 我使用ajax注释添加,所以我需要更新listview。我需要在那之后选择列表视图的最后一页。

A可以使用此

选择加载的最后一页
$dataProvider = new CArrayDataProvider($model->comments);
$pager=$dataProvider->pagination;
$pager->itemCount=$dataProvider->totalItemCount;
if(!Yii::app()->request->isAjaxRequest)
   $pager->currentPage=$pager->pageCount;

我可以手动更新clistview

$.fn.yiiListView.update("commentsList");

但是,我不能一起做这件事:) 我也尝试将数据数组传递给javascript函数更新。 所以,我需要使用ajax添加注释,然后我需要更新clistview并选择最后一页。任何想法,我该怎么做?

4 个答案:

答案 0 :(得分:2)

作为一种解决方法,您可以在寻呼机的“最后一页”按钮上触发click事件。

$('#pagination li.last a').trigger('click');

答案 1 :(得分:1)

经过几次尝试,我终于做出了理想的行为。它比我想象的更难,也许有更简单的方法,但我拥有我拥有的东西。

所以,我用了

div.keys

CListView用于提供更新的url数据。

每次用户添加或删除评论时,我们都会调用更新方法

$.fn.yiiListView.update('commentsList');

从div.keys获取title attr。 所以我决定在调用update方法之前手动更改标题attr。 我还需要有关总页码的信息,所以我将class添加到我的commentsList

$this->widget('bootstrap.widgets.TbListView',array(
            'dataProvider'=>$dataProvider,
            'itemView'=>'/comment/_comment',
            'id'=>'commentsList',
            'htmlOptions' => array(
                "class"=>$pager->pageCount,
            ),
        ));

我写了函数来获取所有信息

var getUrlInfo = function() {
    var divKeys = commentsBlock.find('div.keys'),
        keys = divKeys.attr('title'),
        currentPage = "",
        lastPage = parseInt (commentsBlock.find('#commentsList').attr('class')) +1, 
        temp = keys.lastIndexOf("page=") + 5,
        pageNumberIndex = temp;

    while ( !isNaN(parseInt(keys[temp])) ) {
            currentPage +=keys[temp];
            temp++;
    };

    return {'divKeys':divKeys, 'keys':keys, 'currentPage':currentPage,     'lastPage':lastPage, 'pageNumberIndex':pageNumberIndex};
};

之后,我设置规则来更改标题attr以添加评论     var urlInfo = getUrlInfo();     if(urlInfo.currentPage.length){                     urlInfo.divKeys.attr(                             '标题',                             urlInfo.keys.slice(0,urlInfo.pageNumberIndex)+ urlInfo.lastPage + urlInfo.keys.slice(urlInfo.pageNumberIndex + urlInfo.currentPage.length)                         );                 }

            else { 
                if (urlInfo.keys.indexOf('ajax')>0) 
                    {
                        urlInfo.divKeys.attr('title', urlInfo.keys + "&page=" + urlInfo.lastPage);
                    }
                else urlInfo.divKeys.attr('title', urlInfo.keys + "?page=" + urlInfo.lastPage);
            }

并删除评论功能

var urlInfo = getUrlInfo();

            if (!urlInfo.currentPage.length) { 
                console.log('da');
                if (urlInfo.keys.indexOf('ajax')>0) 
                    {
                        urlInfo.divKeys.attr('title', urlInfo.keys + "&page=" + urlInfo.lastPage);
                    }
                else urlInfo.divKeys.attr('title', urlInfo.keys + "?page=" + urlInfo.lastPage);
            }

我还为view.php设置了此规则

if(!Yii::app()->request->getQuery('ajax') && !Yii::app()->request->getQuery('page')) {
            $pager->currentPage=$pager->pageCount;
        }

答案 2 :(得分:1)

找到一个适合我的解决方案,将参数附加到$ .fn.yiiListView.update函数

JS Part:

 $.fn.yiiListView.update('switchlist-designer-clistview',{
                  data: $(this).serialize()+"&gotoLastPage=true",
                  complete:function(){
                    //Ajax loading is finished           
                  });

控制器中的PHP部分

if(Yii::app()->getRequest()->getParam("gotoLastPage")=="true"){
      //Important to unset the gotoLastPage Parameter otherwise the pagination wont work
       unset($_GET["gotoLastPage"]);

      //Get the last page 
      $lastPage = ceil($activeDataProvider->getTotalItemCount()/$activeDataProvider->getPagination()->pageSize);

      //Set the lastpage
      $paginator->currentPage=$lastPage;
      $activeDataProvider->setPagination($paginator);
  }

答案 3 :(得分:0)

您还可以像这样更改网址选项:

$.fn.yiiListView.update('productslistview', { 
    url: 'http://domain/search/controller?str=test&Controller_page=' + pageNumber + '&ajax=listview'
})

最后一页你可以从你的dataProvider获取php端:

$dataProvider->getCount()