2013-04-09 51 views
2

我的應用程序數據庫剛剛超過100 Gbs,它很快就會崩潰。用靜態頁面替換clistview中的第一個結果頁面

我可以保存它,如果我可以用靜態頁面替換CListView的第一個結果頁面。

服務器打印靜態頁面更容易。我可以根據需要輕鬆地重新生成靜態頁面。

沒有代碼,因爲我不知道如何修改ClistView來達到我的目標,如果可能的話;

使用內存分配時會找到答案;

對於那些知道如何與memmory工作,還有就是長期SENTINEL

添加新的數據隊列時,你必須找到數據的正確位置,然後將其插入

通過使用哨兵,你willalways在隊列中至少2個元素

這是我neeed才達到

我需要把一個哨兵,在CListView中的第一個元素之前

我需要操縱clistview;我只是想設置CListView中的第一頁,我的靜態頁面

也許分頁將被設置爲40個元素,而我的靜態頁面將有1000每頁

但是當用戶點擊第2頁或3或4 ... clistview應列出下一個40

第2頁,實際上,clistview將列出第一個真實結果;一切都被推到右邊

+0

你想在你的靜態頁面上顯示什麼?如果它真的是一個靜態頁面,那麼它甚至不會在那裏分頁。另外它不再是靜態的。在那種情況下,我想知道你想如何導航到下面的頁面。 – 2013-04-10 06:41:32

+0

即使第一頁是靜態的,我也要激活導航 – 2013-04-10 07:14:30

+0

然後您不應該調用該「靜態頁面」。您將在該頁面上看到一個數據庫查詢,因爲分頁總是需要1個查詢才能獲取總數。 – 2013-04-10 08:43:27

回答

2

您可以使用CListView的頁面索引變化的page caching。當然,這並不像返回靜態頁面那樣快,但可以顯着提高性能。

UPDATE

爲了替換CListView鏈接到第一頁,你可以重寫createPageUrl方法CLinkPager

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

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

,並與您CListViewpager屬性設置爲使用它:

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

我正在使用頁面緩存;但有可能取代第一頁? – 2013-04-09 21:20:15

+0

如果您使用頁面緩存,並且您可以輕鬆地重新生成「CListView」第一頁的靜態內容,這是否意味着您只需要將鏈接替換爲「CListView」頁面中的第一頁? – Ezze 2013-04-09 21:25:16

+0

不,我編輯了我的描述,請您閱讀上面的 – 2013-04-10 07:15:27

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個查詢來獲取項目計數。只要您爲「靜態」內容渲染分頁,就無法避免這種情況。

+0

這樣的事情;我必須創建一個假傳呼機 – 2013-04-10 14:11:41