2009-09-02 23 views
2

タイトルはちょっと怪しいですが、それは私が朝の4時に思いつくのが最高です。私はページングしているリンクテーブルを持っていますが、何も気にしません。たとえば、100ページのリンクが20ページ、5ページに表示されているとします。最初のページで1から始まり20までの各リンクに番号を付けて、最後のページにスキップした場合は81から100になります。動的にCakePHP 1.2を使用して完了しました。この例はreddit.comCakePHP:番号が付けられたページ区切りの結果

答えて

5

ビューでこれを試してみてください:

<?php debug($this->params['paging']); ?> 

は、これはあなたのページネータの現在のステータスに関する内部情報のビットを与えるでしょう。

Array (
    [Model] => Array (
      [page] => 2 
      ... 
      [options] => Array (
        [limit] => 20 
        ... 

'limit'は「ページごとのアイテム」と'page'ビーイング、うまく、ページであること:たとえば、あなたはこれを見つけることができます。
この情報を使用すると、出力にこの種のカウンタを挿入するのはかなり簡単です。

$page = $this->params['paging']['Model']['page']; 
$limit = $this->params['paging']['Model']['options']['limit']; 

$counter = ($page * $limit) - $limit + 1; 

foreach ($models as $model) { 
    echo $counter; 

    // normal $model output 

    $counter++; 
} 
+0

Bam!完璧に動作します。ありがとう! –

-1

ページネーションロジックになり、次のとおりです。

SELECT COUNT(*)WHERE ... ORDER BY ... MY_TABLE FROM。

最初に、ページされるレコードの数を知りたいとします。

次に、ページごとに必要なレコードの数でレコードの総数を分割し、この数値を「上限」にします。そうでない場合は、最後のいくつかのレコードは独自のページを取得しません。

ここでは、レコード数とページ数があります。

次に、ページ番号を1から1ページあたりのレコード数で掛けて、どのレコードから追加のレコードを取得するかを知ってください。このクエリの意志のようなものになります。MY_TABLE ... ORDER BY ... LIMIT FROM

SELECT *を{xページあたりのレコード(現在のページ番号 - 1)}、{ページあたりのレコードが}

理由あなたが1を引いたのは、1ページに20レコード(例えば1 x 20 = 20)を取得していて、最初のページではなく0からレコードを取得したいからです。だから、乗算する前にマイナス1。

次に、レコードを表示するだけです!

:D

+0

「ページごとのレコード数×ページ番号」は、「ページ番号」が0から始まる場合にのみ機能します。それ以外の場合は、その計算のページ番号から1を引く必要があります。 – Amber

+0

これはそれを行うためのケーキの方法でもありません。私はあなたが不必要に行うカスタマイズを制限します。 –

+0

あなたの答えは間違いありませんが、私は本当に物事を行うケーキの方法を探していました。 –

関連する問題