1

Cakephp 2.0 のページネーターに苦労しています。アプリケーションを 2.0 に移行しようとしているときに、最後のページに直接ジャンプする解決策が見つかりません。1.3では、次のように外部からそれを行うのは静かでした:

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

しかし、「page:last」を挿入するこの小さなトリックは、2.0 では機能しなくなりました。もちろん、last という名前の Paginator 関数がありますが、これは既にアプリ内にいる場合にのみ役立ちます。私の問題は、外部リンクからページネーターの最後のページに直接アクセスすることです。

4

3 に答える 3

0

「last」がページ番号として渡された場合、最後のページを自分で「計算」できます。

将来のアップグレードが困難になるため、CakePHP ライブラリ ファイルを変更することはお勧めしません。

基本的に、PaginatorHelper は、次のように PaginatorComponent によって計算および設定される viewVar を使用します: 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 を変更する必要はありません!

また、私の例の 'find(count)' は追加の条件を使用しないことに注意してください。必要に応じて追加する必要があります

の CakePHP 1.3 ソースを見ると、paginate()上記のコードは同等です。https://github.com/cakephp/cakephp/blob/1.3/cake/libs/controller/controller.php#L1204

于 2013-03-15T22:12:10.690 に答える
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

于 2012-11-22T16:58:26.850 に答える
0

この質問の報奨金を作成した直後に、CakePHP 2.2.4 を使用して私の問題の解決策を見つけました。私は同じタスクを達成しようとしていましたが、代わりに 2.0 の代わりにバージョン 2.2.4 を使用していました。基本的に、 http://www.domain.com/articles/page:lastのようなリンクがあった場合、コントローラーのページネーション メソッドはどのページに移動するかを認識し、そのページの正しい結果 (記事) を表示します。たとえば、110 件の記事があり、ページネーションの制限が 25 に設定されている場合、その URL に移動すると、5 ページ中 5 ページが表示され、レコード 101 ~ 110 が表示されます。「page:first」に移動する場合にも同じ機能が必要でした。

ライブラリ ファイルlib/Cake/Controller/Component/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));

Christian Waschke は、このソリューションを使用して、質問に書いたとおりに同じリンク ヘルパーを使用できます。私にとって、リンクヘルパーはこのように見えました

<?php echo $this->Html->link('Go to Last Page', array('controller' => 'articles', 'action' => 'index', 'page' => 'last')); ?>
于 2013-03-13T16:17:29.727 に答える