用静态页面替换clistview中的第一个结果页面

时间:2013-04-09 20:58:30

标签: php sql yii

我的应用程序数据库刚刚超过100 Gbs,很快就会崩溃。

如果我可以用静态页面替换CListView的第一个结果页面,我可以保存它。

服务器更容易打印静态页面。我可以根据需要每天轻松地重新生成静态页面。

没有代码,因为我无法弄清楚如何修改ClistView以达到我的目标,如果可行的话;

使用memmory分配时会找到答案;

对于那些知道如何使用memmory的人来说,有一个术语SENTINEL

将新数据添加到队列时,您已找到数据的正确位置,然后将其插入

通过使用哨兵,队列中至少有2个元素

这就是我需要达成的目标

我需要在clistview的第一个元素之前放置一个哨兵

我需要操纵clistview;我只想用我的静态页面

设置clistview的第一页

也许分页将设置为40个元素,而我的静态页面将每页有1000个

但是当用户点击第2页或第3页或第4页时... clistview应列出下一个40

对于第2页,实际上,clistview将列出第一个真实结果;一切都被推向了正确的

2 个答案:

答案 0 :(得分:2)

您可以使用page caching改变CListView的页面索引。当然,这不如返回静态页面那么快,但可以显着提高性能。

<强>更新

要替换CListView中第一页的链接,您可以覆盖createPageUrlCLinkPager方法:

<?php
class StaticLinkPager extends CLinkPager
{
    public $firstPageUrl;

    protected function createPageUrl($page)
    {
        if ($page == 1)
            return $this->firstPageUrl;
        return parent::createPageUrl($page);
    }
}

并将CListView设置为pager属性并将其用于:

array(
    'class' => 'StaticLinkPager',
    'firstPageUrl' => '/list-view-first-static-page.html'
)

答案 1 :(得分:2)

从你的评论中我猜你可能想要这样的东西:

<?php if($dataProvider->pagination->currentPage==0): ?>
    <?php /* 
       Render your static content + a custom CLinkPager here.
       Feed $dataProvider->pagination as 'pages' into the link pager.
     */ ?>
<?php else: ?>
     <?php /* Render your listview here */ ?>
<?php endif; ?>

正如我在上面的评论中所述,您仍会看到1个查询来获取项目计数。只要您为“静态”内容呈现分页,就无法避免这种情况。