1

Cakephp で Facebook に似たダッシュボードを実装しようとしています (投稿を取得してタイムラインに投稿し、それを押しsee moreている間は以前のオフセットから投稿を取得し続けます)、まだロジックとツールについて混乱しています。cakephp のページネーションを使用する必要があります私の実装のクラス。

$this->paginate();

なんらかのパフォーマンスに応じて、何らかの形でajaxを介して呼び出す必要があります

どこから始めればよいか、または提案はありますか?

皆さんありがとう

4

1 に答える 1

2

ページネーションを使用しない

データを先頭に追加するものをページ付けすると、2 ページ目を要求するようにデータが重複して取得され、現在のユーザーに関する限り、前のページの終わりが取得されます。

タイムスタンプを使用する

無限のデータ ストリームの通常の手法は、次のようなクエリを使用することです。

SELECT *
FROM foos 
WHERE created >= $previousLastTimestamp 
ORDER BY created DESC 
LIMIT 20

この例では を使用createdしていますが、疑似一意の任意のフィールドを使用できることに注意してください。

ページを最初にレンダリングするときに、最後のエントリのタイムスタンプを JavaScript 変数に保存すると、「投稿をさらに取得する」ロジックは次のようになります。

  • 最後のタイムスタンプを渡して ajax (get) リクエストを行う
  • 上記の sql クエリを実行します ($this->Foo->find呼び出しとして)
  • あなたのjsで最後のタイムスタンプを更新して、ユーザーが次に「もっと投稿を取得」をクリックしたときにどこにいるのかがわかるようにします

条件を使用する理由>=は、テスト対象のフィールドに一意の値がない限り、テスト対象の値を持つ複数の行が存在する可能性があるためです。(id) で並べ替える自然に一意のフィールドがある場合は、より大きいまたは等しいを使用する必要はありません。単純により大きいを使用することができ、重複する行について考える必要がなくなります。

これは、従来のページネーションを回避してこのようなシステムを処理する必要がある理由をより詳細に説明するリファレンスです。

于 2013-03-21T13:18:14.360 に答える