2012-07-13 49 views
1

我認爲我使用這個代碼錨:CakePHP的分頁程序,如何讓當前頁

$numbers = $this->Paginator->numbers(array(
    'separator'  => '', 
    'tag'   => 'li', 
    'currentClass' => 'active' 
)); 

,輸出:

<li class="active">1</li> 
<li><a href="/controller/action/page:2">2</a></li> 
<li><a href="/controller/action/page:3">3</a></li> 

這工作得很好,我有唯一的問題這是當前頁面不是一個鏈接。是否有可能使當前頁面成爲鏈接?

感謝您的閱讀。

+0

你正在使用cakephp的cersion? – 2012-07-13 07:32:13

+0

嘗試讓分隔符錯誤並嘗試 – 2012-07-13 07:36:08

+0

我嘗試將分隔符設置爲false,但它產生了相同的結果,並且我使用的是蛋糕2.0.5。 – cyphun 2012-07-13 07:59:47

回答

2

我實現了一個類擴展像戴夫的建議,但不是從原來的類複製所有的代碼,我做了一個字符串替換方法來代替,這樣一來,如果我更新CakePHP的核心庫,這會失敗漂亮優雅,其中從原始助手複製所有的代碼可能會導致部分功能的丟失,錯誤修正等。這裏就是我實現了類:

<?php 

class AppPaginatorHelper extends PaginatorHelper 
{ 
    public function numbers($options = array()) { 
     $output = parent::numbers($options); 

     // get the current page number, and create a link with it 
     $current = $this->current(); 
     $currentLink = $this->link($current, array('page' => $current)); 

     // if you're using cake pre 2.1 you cannot change the current class with 
     // the options array, so it will always be "current" 
     $find = "<li class=\"current\">{$current}</li>"; 
     $replace = "<li class=\"active\">{$currentLink}</li>"; 

     $output = str_replace($find, $replace, $output); 

     return $output; 
    } 
} 
1

答案很簡單:

我不相信這是可以與Paginator Helper

如果你只是想一個鏈接到當前頁面,但不帶編號的鏈接內需要它,你可以使用

echo $this->Html->link($this->Paginator->counter('{:current}'), 'yourLinkHere'); 

但是,這並不是說非常有用,因爲你依靠分頁程序助手爲您照顧其他鏈接。

擴展答案/可能性

你可以像這樣的東西下面延伸PaginatorHelper。基本上,我只是刪除檢查,看看它是否是當前頁碼。然後,您必須使用MyPaginatorHelper來建立鏈接。這也會使其忽略currentClass選項等等。但是 - 通過對代碼進行更多的調整,你可以使它成爲同樣的東西,但也建立一個鏈接,而不是僅僅去除IF檢查。

class MyPaginatorHelper extends PaginatorHelper { 
    public function numbers($options = array()) { 
    if ($options === true) { 
     $options = array(
      'before' => ' | ', 'after' => ' | ', 'first' => 'first', 'last' => 'last' 
     ); 
    } 

    $defaults = array(
     'tag' => 'span', 'before' => null, 'after' => null, 'model' => $this->defaultModel(), 'class' => null, 
     'modulus' => '8', 'separator' => ' | ', 'first' => null, 'last' => null, 'ellipsis' => '...', 'currentClass' => 'current' 
    ); 
    $options += $defaults; 

    $params = (array)$this->params($options['model']) + array('page' => 1); 
    unset($options['model']); 

    if ($params['pageCount'] <= 1) { 
     return false; 
    } 

    extract($options); 
    unset($options['tag'], $options['before'], $options['after'], $options['model'], 
     $options['modulus'], $options['separator'], $options['first'], $options['last'], 
     $options['ellipsis'], $options['class'], $options['currentClass'] 
    ); 

    $out = ''; 


     $half = intval($modulus/2); 
     $end = $params['page'] + $half; 

     if ($end > $params['pageCount']) { 
      $end = $params['pageCount']; 
     } 
     $start = $params['page'] - ($modulus - ($end - $params['page'])); 
     if ($start <= 1) { 
      $start = 1; 
      $end = $params['page'] + ($modulus - $params['page']) + 1; 
     } 

     if ($first && $start > 1) { 
      $offset = ($start <= (int)$first) ? $start - 1 : $first; 
      if ($offset < $start - 1) { 
       $out .= $this->first($offset, compact('tag', 'separator', 'ellipsis', 'class')); 
      } else { 
       $out .= $this->first($offset, compact('tag', 'separator', 'class') + array('after' => $separator)); 
      } 
     } 

     $out .= $before; 

     for ($i = $start; $i < $params['page']; $i++) { 
      $out .= $this->Html->tag($tag, $this->link($i, array('page' => $i), $options), compact('class')) . $separator; 
     } 

     if ($class) { 
      $currentClass .= ' ' . $class; 
     } 
     $out .= $this->Html->tag($tag, $params['page'], array('class' => $currentClass)); 
     if ($i != $params['pageCount']) { 
      $out .= $separator; 
     } 

     $start = $params['page'] + 1; 
     for ($i = $start; $i < $end; $i++) { 
      $out .= $this->Html->tag($tag, $this->link($i, array('page' => $i), $options), compact('class')) . $separator; 
     } 

     if ($end != $params['page']) { 
      $out .= $this->Html->tag($tag, $this->link($i, array('page' => $end), $options), compact('class')); 
     } 

     $out .= $after; 

     if ($last && $end < $params['pageCount']) { 
      $offset = ($params['pageCount'] < $end + (int)$last) ? $params['pageCount'] - $end : $last; 
      if ($offset <= $last && $params['pageCount'] - $end > $offset) { 
       $out .= $this->last($offset, compact('tag', 'separator', 'ellipsis', 'class')); 
      } else { 
       $out .= $this->last($offset, compact('tag', 'separator', 'class') + array('before' => $separator)); 
      } 
     } 

    } 

    return $out; 
} 
} 
+0

感謝您確認我對PaginatorHelper的懷疑。這看起來像是一個簡單的選項,爲了讓它們保持所有鏈接,我想可能CakePHP上的工作人員會將它添加到那裏。我最終做了一個擴展在PaginatorHelper中的類,但實現方式有點不同。 – cyphun 2012-07-13 16:37:53

2

您可以通過使用下一段代碼讓你想要什麼:

<?php echo $this->Paginator->numbers(array('separator' => '','tag' => 'li', 'currentTag' => 'a', 'currentClass' => 'active')); ?> 

它只適用於CakePHP 2.3+

1

我找到了一個很好的解決方案,併爲你分享:)

<div class="pagination pagination-large"> 
    <ul> 
      <?php 
       echo $this->Paginator->prev(__('prev'), array('tag' => 'li'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a')); 
       echo $this->Paginator->numbers(array('separator' => '','currentTag' => 'a', 'currentClass' => 'active','tag' => 'li','first' => 1)); 
       echo $this->Paginator->next(__('next'), array('tag' => 'li','currentClass' => 'disabled'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a')); 
      ?> 
     </ul> 
</div>