1

私は、次の機能を備えたWebサイト(Yiiを使用して記述)のモジュールを準備するように依頼するクライアントのために働いています。

  • これは、offset=0から始まるmysql_resultからの3つの要素を示しています。
  • ユーザーはそれらのいずれかをクリックして、「既読」としてマークすることができます。これにより、目的のアイテムが非表示になり、次のアイテムが表示されます。つまり、アイテムを表示3 4 5しているときにをクリックすると4、そのアイテムが消えて番号が表示され6、結果はになります3 5 6
  • 表示されている要素は部分ビューであり、アイテムを「削除」するボタンは各部分ビュー内のウィジェットです。
  • ユーザーは、いくつかの矢印<<>>矢印を使用してアイテムのリストを移動し、結果を前後に移動できます。
  • クライアントが私に与えたオプションの1つは、ページのリスト(1 | 2 | 3 | 4 ...など)を表示することでしたが、アイテムを削除すると、将来的にページ数が減少することになります。量がかなり多いので、現在のページと他の4ページだけを表示するなど、もっと柔軟なものが必要になります。もう1つのオプションは、<<および>>矢印を保持することです。
  • ページネーションと「ライブリスト」はかなり悪いアイデアだとクライアントに納得させようとしましたが、彼は視覚化を最初の3つのアイテムのみに制限するというアイデアを拒否しました(最終的にはそれらを削除するため、削除することに注意してください)以下の項目を見ることができます)。

Yii、MySQL、jQueryを使用して開発していますが、この生きているリストのためにCPaginationを使用できません。私はコードを求めているのではなく、3回目に試したときに迷子になったため、いくつかのガイドラインを求めています。

システムに関するいくつかの基本:

  • このモジュールの最初の3つのアイテムをロードするコントローラーを入手しました。
  • このコントローラーで、ページ内の次のアイテム(ただし、現在のオブジェクトと同じではない可能性があります。私の問題の1つはここにあります)とページ全体をフェッチするアクションをいくつか取得しました。
  • 各アイテムはそれ自体を「既読」としてマークすることができます。これにより、次に結果をフェッチしたときにアイテムが表示されなくなります。
  • 1秒ごとに、既読としてマークされたアイテムをチェックし、DOMから削除し、2番目の箇条書きで定義したアクションを使用していくつかの新しいアイテムを追加します。
  • <<ユーザーがまたはを押すたび>>に、前/次のページをリロードします(これは明らかに問題ではありません。最後のページにいて、追加するアイテムがない場合は、そこにとどまります。ただし、ページを空にします。それを検出して1ページ戻る方法がありません)。

ご覧のとおり、この頭痛の種はページネーションボタンがないと簡単になりますが、クライアントは私にそれらを配置するように義務付けています。あなたはみんな何をしますか?前もって感謝します

編集:クライアントは、ランダムなフレーバーで結果を取得することを決定しました。これ以上のページネーションがないので、問題はなくなりました。@thaddeusmtの回答はあまり役に立たなかったかもしれませんが、私と同じような問題を抱えている他の人々にとっては十分に役立つ可能性があるため、有効なものとして提供します。乾杯

4

1 に答える 1

2

CGridViewまたはCListViewは基本的にこれを自動的に行う必要があるように私には思えます。それらは、 AJAXの更新/ページングをすぐにサポートします。

ユーザーがクリックしたときに呼び出す「actionMarkRead()」のようなAJAXアクションがあると仮定します。これにより、ユーザーがそのアイテムを「読み取った」ことを示すデータベースフィールドがどこかに設定されると思います。これをCListViewで機能させるには、CDataProviderにconditionその「読み取り」フィールドをチェックするが含まれていることを確認してください(テーブルに参加する必要がある場合があります。DBがどのように見えるかわかりません)。次に、リストがAJAXを介してリロードされると、CDataProvierクエリが返すページ数が少ないことを表す正しいページ数が表示されます。

私はこれをテストしました、そしてそれは働きます!

テストした方法は、を使用してCGridViewを設定することです'ajaxUpdate'=>true,。次に、CDataProviderで、'pagination'=>1テストを簡単にするように設定しました。actionDelete次に、コントローラーでデフォルトのAJAXを使用してアイテムを削除しました。CGridViewのAJAXアクションリンクを介してアイテムを削除するたびに、AJAXを介してグリッドが更新され、ページ数が1つ減少しました。魅力のように機能しているようです。

乾杯と幸運を!

于 2011-06-07T20:40:59.643 に答える