【问题标题】:Why CListView dataProvider fails to manage the data received from Sphinx?为什么 CListView dataProvider 无法管理从 Sphinx 接收到的数据?
【发布时间】:2013-02-01 09:01:48
【问题描述】:

我使用Sphinx 生成所需ID 的列表。在这个ID 列表中,我使用Sphinx 语言应用filters,然后使用Search 模型方法创建并返回一个新的CActiveDataProvider;

image example

$dataProvider = new CActiveDataProvider('model', array(
                    'criteria' => $criteria,
                    'pagination' => array(
                        'pageSize' => $this->pageSize,
                        'currentPage' => $this->cp_page - 1,
                    ),
                ));

在视图中,现在,我有:

<div class="search_result searchconright">
         <?php

                 $custom_pager_left = '
                <div class="pagetxt">

                <ul class="searchPager">
                    <li><span>View</span></li>
                    <li class="page"><a href="" class="page_search_limit">All</a></li>
                    <li class="page"><a href="" class="page_search_limit page_search_limit_active">3</a></li>
                    <li class="page"><a href="" class="page_search_limit page_search_limit_active">5</a></li>
                    <li class="page"><a href="" class="page_search_limit page_search_limit_active">24</a></li>
                    <li class="page"><a href="" class="page_search_limit">48</a></li>
                </ul>

                </div>
            ';

        $this->widget('zii.widgets.CListView', array(
            'ajaxUrl' => Yii::app()->createAbsoluteUrl('/employer/search'),
            'id'=>'listViewSearch',
            'dataProvider' => $model->search(),
            'template' => "{summary}\n{sorter}\n{items}\n<div style='float:left;width=700px;'>$custom_pager_left<div class='pagetxt'>{pager}</div></div>",
            'itemView' => '_index_post',
            'enablePagination' => true,
            'pager' => array(
                'cssFile' => Yii::app()->baseUrl . '/css/clistview.css',
                'header' => false,
                'firstPageLabel' => 'First',
                'prevPageLabel' => 'Previous',
                'nextPageLabel' => 'Next',
                'lastPageLabel' => 'Last',
            ),
            'summaryText' => '',
            'sortableAttributes' => array(
            ),
        ));
        ?>
    </div>

但这无法正常工作,因为如果我单击下一步,并且列表结束,不知何故,ajax 代码不会重新初始化正在发送的 url,它会继续与旧 url 连接,直到 url 变得如此大到应用程序崩溃。

CListView不应该验证接收到的数据是否存在吗? Sphinx 可以提供一个注册 ID,该 ID 不再存在或处于非活动状态;

发生了什么,我该如何预防?

【问题讨论】:

  • 我认为这可能是寻呼机而不是 CListView。 expanding url 是什么样子的?它一直在添加页面,还是?...
  • ClListView 小部件包括一个寻呼机;解释 EXPANDING url 这个词...我不明白
  • 对不起,我的意思是你问题中的那个 url,你提到 ** 它会继续与旧 url 连接,直到 url 变得如此之大以至于应用程序崩溃**。它是否添加了 page/1/page/2/page/3 之类的参数?
  • 不,它将旧 url 与新请求 url 连接起来

标签: php yii sphinx dataprovider


【解决方案1】:

我发现论坛主题与ajaxUrl 属性和分页有关。看起来 ajaxUrl 被分页忽略了。奇怪,也许这就是问题所在。

这里是这个话题:http://www.yiiframework.com/forum/index.php/topic/21886-problem-with-clistview-and-ajaxurl-property/

请注意,最后发布的路由是在 dataprovider 而不是 listview 上设置的。内部列表视图或网格视图应将 ajaxUrl 传递给 dataprovider。

以下是手动设置分页路由的方法: http://www.yiiframework.com/doc/api/1.1/CPagination#route-detail

$dataprovider->pagination->route = 'site/index';

如果使用了某些参数,还可以手动设置分页参数(包括 $_GET 附带的参数): http://www.yiiframework.com/doc/api/1.1/CPagination#params-detail

$dataprovider->pagination->params = array('search' => 'Search string');

我也不确定应该如何设置$custom_pager_left 链接hrefs?

【讨论】:

  • 对于 $custom_pager_left 我有 ajax 代码可以捕获值并启动一个进程
  • 所以,很长一段时间后,我从您提供的页面中阅读了文档,是的,这是一个 yii 问题;在再次创建链接之前,我需要取消设置 $_GET
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多