【问题标题】:replace the first result page from clistview with static page用静态页面替换 clistview 中的第一个结果页面
【发布时间】:2013-04-01 12:00:58
【问题描述】:

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

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

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

没有代码,因为我不知道如何修改 ClistView 以达到我的目标,如果可能的话;

使用内存分配时找到答案;

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

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

通过使用哨兵,您将始终在队列中至少有 2 个元素

这是我需要达到的目标

我需要在 clistview 的第一个元素之前放置一个标记

我需要操作 clistview;我只想用我的静态页面设置 clistview 的第一页

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

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

实际上,对于第 2 页,clistview 将列出第一个实际结果;一切都被推到右边

【问题讨论】:

  • 您想在静态页面上显示什么?如果它真的是一个静态页面,那么它甚至不会在那里有分页。否则它不再是静态的。在这种情况下,我想知道您想如何导航到以下页面。
  • 即使首页是静态的,我也想激活导航
  • 那么你不应该称之为“静态页面”。您将在该页面上看到一个数据库查询,因为分页将始终需要 1 个查询来获取总计数。

标签: php sql yii


【解决方案1】:

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

更新

为了替换CListView 中第一页的链接,您可以覆盖CLinkPagercreatePageUrl 方法:

<?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'
)

【讨论】:

  • 我正在使用页面缓存;但是可以替换第一页吗?
  • 如果你使用页面缓存并且你可以很容易地重新生成CListView的首页的静态内容是否意味着你只需要在CListView的寻呼机中替换一个指向首页的链接?
  • 你值得+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 个查询来获取项目计数。只要您也为“静态”内容呈现分页,就无法避免这种情况。

【讨论】:

  • 这样的;我必须创建一个假寻呼机
猜你喜欢
  • 2012-07-08
  • 1970-01-01
  • 2013-09-29
  • 2015-11-30
  • 2021-05-04
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 2018-05-24
相关资源
最近更新 更多