1

私の見解では、私はこのコードを使用しています:

$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>

これはかなりうまく機能します。私が抱えている唯一の問題は、現在のページがリンクではないということです。現在のページをリンクにすることはできますか?

読んでくれてありがとう。

4

5 に答える 5

2

Dave が提案したようにクラス拡張を実装しましたが、元のクラスからすべてのコードをコピーする代わりに、代わりに文字列置換メソッドを実行しました。そのようにして、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;
    }
}
于 2012-07-13T16:45:07.317 に答える
2

次のコードを使用して、必要なものを作成できます。

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

CakePHP 2.3+ でのみ動作します

于 2013-06-20T11:08:40.883 に答える
2

それを機能させるために作成されたPRがあります。残念ながら、それは 2.3 バージョンで発生する予定です。

ここで PR を見つけることができます https://github.com/cakephp/cakephp/pull/900

ここでディスカッションhttp://cakephp.lighthouseapp.com/projects/42648/tickets/2892-paginator-helper-numbers-is-a-bit-counter-intuitive-enhancement-includedを見つけることができます

于 2012-12-08T02:18:49.217 に答える
1

簡単な答え:

Paginator Helperで利用できるとは思いません。

現在のページへのリンクだけが必要で、番号付きリンク内には必要ない場合は、次を使用できます

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

しかし、残りのリンクの処理を Paginator Helper に頼っているので、これはあまり役に立ちません。

拡張回答/可能性

以下のようなもので 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;
}
}
于 2012-07-13T13:23:39.513 に答える
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>
于 2013-08-01T14:12:59.963 に答える