2012-11-22 115 views
1

我在Cakephp 2.0中苦苦掙扎。當我試圖將我的應用程序遷移到2.0時,我找不到任何解決方案直接跳到最後一頁。在1.3很安靜做到這一點從外面是這樣的:Paginator(從Cake 1.3遷移到2.0)

echo $this->Html->link(__('Flights'), array('controller' => 'flights', 
    'action' => 'index','page' => 'last')); 

但這種小伎倆把頁面:最後'在不在2.0工作了。當然,還有一個名爲last的Paginator函數,但這隻會幫助我已經在應用程序中。我的問題是直接從外部鏈接訪問分頁器的最後一頁。

+0

我更新了我的答案。 – Alvaro

+0

我對同樣的事情感興趣,但我不想添加新的問題。任何幫助。 – bowlerae

回答

0

這是一個簡單的方法:

echo $this->Paginator->last('Any text'); 

其他方式來獲得最後一頁的號碼是:

echo $this->Paginator->counter(array('format' => '{:pages}')); 

然後你可以用它來生成你的鏈接。

欲瞭解更多信息: http://book.cakephp.org/2.0/en/core-libraries/helpers/paginator.html#PaginatorHelper::last

+0

對不起,但我認爲存在誤解。我想訪問一個URL,如:「http://bla.de/cakephp2.0/flights/page/last」。這工作在1.3完美。對不起,但也許由於我的例子,我很難理解。但非常感謝您的閱讀和回答。我仍然希望在Cakephp 2.0中找到這個解決方案 –

0

對於這個問題,創建一個賞金後不久,我發現使用CakePHP 2.2.4解決我的問題。我試圖完成相同的任務,而是使用2.2.4版而不是2.0版。基本上,如果我有一個看起來像http://www.domain.com/articles/page:last的鏈接,那麼控制器的分頁方法將知道要進入哪個頁面並顯示該頁面的正確結果(文章)。例如,如果我有110篇文章,並且分頁限制設置爲25,那麼通過轉到該URL,它將顯示第5頁,顯示記錄101-110。我也想要相同的功能,如果我去「頁:第一」。

我需要改變我的庫文件的lib /蛋糕/控制器/組件/ PaginatorComponent.php

我改變

if (intval($page) < 1) { 
    $page = 1; 
} 

if ((intval($page) < 1 && $page != "last") || $page == "first") { 
    $page = 1; 
} 

我還添加了

if($page == "last"){ 
    $page = $pageCount; 
} 

行後

$pageCount = intval(ceil($count/$limit)); 

克里斯蒂安Waschke,與這種解決方案,你可以使用相同的鏈接助手正是你如何寫在你的問題。對我來說,鏈接助手看起來像這樣

<?php echo $this->Html->link('Go to Last Page', array('controller' => 'articles', 'action' => 'index', 'page' => 'last')); ?> 
0

你可以「計算」的最後一頁自己,如果「最後」作爲頁碼通過;

我會勸阻CakePHP的庫文件進行修改,因爲這將使它很難在未來進行升級。

基本上,PaginatorHelper使用了計算,並由PaginatorComponent設置,如在這裏看到viewVars:https://github.com/cakephp/cakephp/blob/master/lib/Cake/Controller/Component/PaginatorComponent.php#L212

你可以在你的動作複製這一點;例如:

public function index() 
{ 
    if (!empty($this->request->params['named']['page'])) { 
     switch($this->request->params['named']['page']) { 
      case 'first': 
       // replace the 'last' with actual number of the first page 
       $this->request->params['named']['page'] = 1; 
       break; 

      case 'last': 
       // calculate the last page 
       $limit = 10; // your limit here 
       $count = $this->Flight->find('count'); 
       $pageCount = intval(ceil($count/$limit)); 

       // replace the 'last' with actual number of the last page 
       $this->request->params['named']['page'] = $pageCount; 
       break; 
     } 

    } 

    // then, paginate as usual 
    $this->set('data', $this->paginate('Flight')); 
} 

爲了改善這一點,這個邏輯應該被移動到一個單獨的方法,或以一個行爲。然而;如上所見,它是而不是需要在PaginatorComponent中進行修改!

還要注意的是,「查找(計數)」在我的例子不帶附加條件,如果需要的話

如果在CakePHP的1.3源找paginate()他們應該加入,上面的代碼是可比; https://github.com/cakephp/cakephp/blob/1.3/cake/libs/controller/controller.php#L1204