4

私はcakePHPの初心者であり、cakePHPでカスタムページネーションを作成したくありません。

$paginator->numbers() ;次のようなページ番号を表示する関数:

1 | 2 | 3 | 4 | ...

オプションを調べると、セパレータを変更したり、スタイルcss..Etcのクラスを追加したりするためのオプションがいくつかあります。

私が欲しいのはこのような私のページネーションを持つことです:

1-20 21-40 41-60 61-80 ... >>

誰かがそれをコーディングする方法についてのアイデアを持っていますか?

編集 :

でカスタムパギネーターヘルパーを作成しました:app/View/Helper/

CustomPaginatorHelperそして私は私のように私の$helpersに私を追加しましControllerた:

public $helpers = array('CustomPaginator', 'Html', 'Form', 'Js');

しかし、私はこのエラーが発生しました:

Fatal error: Class 'PaginatorHelper' not found in /Applications/MAMP/htdocs/QRCode/app/View/Helper/CustomPaginatorHelper.php on line 2

彼は知らないようですPaginatorHelper!!! カスタムをどこに追加する必要がありますPaginatorか?

注意:関数numbers()は、ページネーションの形式だけを表示します:1-20 21-40 ... etc、ただし、私が思うページへのリンクはありません:)

編集2:

追加App::set('PaginatorHelper','/View/Helper/');しましたが、このエラーは発生しなくなりました。numbers()今、私はこのようにカスタムページネーターのメソッドを呼び出そうとします:

$this->CustomPaginator->numbers(); 

しかし、私はこのエラーを受け取ります:

Fatal error: Call to a member function numbers() on a non-object in /Applications/MAMP/htdocs/QRCode/app/View/Codes/index.ctp on line 71

このエラーの原因は何ですか?customPaginatorHelperをコントローラーの$helpers変数に追加しようとしましたが、それでも同じエラーが発生します。何か案は ?

前もって感謝します

4

5 に答える 5

4

ここで知っておくべき重要なことは、ページネーター コンポーネント (コントローラーで使用) とページネーター ヘルパー (ビューで使用) があることです。使用しているのは、ページネーションに関連付けられた要素のレンダリングを処理する PaginatorHelper クラスです。

残念ながら、PaginatorHelper で達成したいことを行う方法はありません。これを行う場合の最善の方法は、PaginatorHelper クラスを拡張し、numbers()メソッドをオーバーライドして必要なものを返すことです。

私はその特定の方法を見てきましたが、残念ながらそれは良くありません.100行以上の長さです! ただし、PaginatorHelper をサブクラス化し、メソッドをオーバーライドするクラスを作成しました。元の方法は非常に長いため、多くのコピーと貼り付けが必要です。そのため、この回答には直接入れていません。

ここで表示できます: https://gist.github.com/2037902

CustomPaginatorまた、コントローラーのヘルパーのリストに追加する必要があります。

于 2012-03-09T22:58:58.083 に答える
1

さらに簡単な解決策を見つけました.カスタムコードは必要ありません.CakePHPのやり方になります.CakePHP 2.0以下のバージョンでは動作しない可能性があります...

メソッドの場合は、次のようにPaginators number()いつでもオーバーライドできます。default array()

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

options array()たとえば、これらの属性を使用したいときはいつでもこれらのデフォルトをオーバーライドできます。

    $this->Paginator->numbers(
                              array(
                                'separator' => ' - ',
                                'after' => '',
                                'before' => ''
    ));
于 2014-11-20T11:47:03.980 に答える
1

ここで答えを表示できます

カスタムクエリページネーション

ここで別の結果を表示することもできます。

http://www.endyourif.com/custom-pagination-query-in-cakephp/

于 2012-03-20T12:23:41.650 に答える
1

Cake PHP のカスタム ページネーションの回答

これが必要になる良い例は、基になる DB が SQL LIMIT 構文をサポートしていない場合です。これは、IBM の DB2 に当てはまります。カスタムクエリをモデルに追加することで、引き続き CakePHP のページネーションを使用できます。

ページ分割するデータを生成するためにカスタム クエリを作成する必要がある場合は、ページ分割コントローラー ロジックで使用される paginate() および paginateCount() モデル メソッドをオーバーライドできます。また、コアの paginateCount() をオーバーライドする必要があります。このメソッドは、Model::find('count') と同じ引数を想定しています。以下の例では、いくつかの Postgres 固有の機能を使用しているため、使用しているデータベースに応じて調整してください。

ありがとう、これが役立つかどうか見てください

于 2012-03-20T17:25:22.913 に答える