2011-06-07 68 views
1

我正在爲一個客戶,誰問我準備爲它的網站模塊,具有以下特性(使用Yii寫的)的有效分頁:減少結果

  • 這表明從mysql_result 3個元素,從從offset = 0開始。
  • 用戶可以點擊其中的任意一個將其標記爲「已讀」。這使得所需的物品消失並出現以下物品。也就是說,如果您正在顯示項目3 4 5並且您單擊4,那麼該項目將消失並顯示編號6,這意味着結果將爲3 5 6
  • 顯示的元素是局部視圖,「刪除」項目的按鈕是每個局部視圖內的控件。
  • 用戶可以通過使用一些<<>>箭頭來反覆查看結果的項目列表。
  • 客戶給我的一個選項是顯示頁面列表(1 | 2 | 3 | 4 ...等等),但是刪除項目意味着未來某個時候頁面數量會減少,如果金額相當大,我會需要更靈活的東西,例如最多隻顯示當前頁和其他4頁。另一種選擇是保持< <和>>箭頭。
  • 我試圖說服客戶,分頁和一個「活動列表」是一個非常糟糕的主意,但他拒絕了這個想法限制可視化只有前3項(記住,最終你會刪除它們因此將能夠看到以下項目)。

我正在開發它使用Yii,MySQL和jQuery,我不能使用CPagination,因爲這個生活清單。我沒有問代碼,只是一些指導原則,因爲我第三次嘗試這樣做時迷路了。

有關係統的一些基礎知識:

  • 我得到了它加載第3項該模塊的控制器。
  • 我在這個控制器中獲取了一些操作,它獲取頁面內的下一個項目(可能與當前對象不一樣,但我的問題之一在於此)和整個頁面。
  • 每個項目都能夠將自己標記爲「已讀」,這會在下次獲取某些結果時使項目不顯示。
  • 每隔1秒我檢查一下已標記爲已讀的項目,從DOM中刪除並使用第二個項目符號中定義的操作附加一些新項目。
  • 每次用戶點擊<<>>時,我都會重新載入上一頁/下一頁(這顯然不是問題,如果您在最後一頁並且沒有更多項目要添加,您只需保留但是如果你清空頁面,我沒有任何方法可以檢測到這個頁面,並且回滾一頁)。

正如您所看到的,如果沒有分頁按鈕,這種頭痛會更容易,但客戶端要求我放置它們。你會做什麼?在此先感謝

編輯:客戶決定以隨機的風味得到的結果。沒有更多的分頁,所以問題已經消失。@thaddeusmt的答案可能對我沒有太大的幫助,但我認爲它是有效的,因爲它可能對其他有類似問題的人非常有用。乾杯

回答

2

在我看來,像CGridViewCListView應該基本上自動執行此操作。它們支持AJAX updating/paging開箱即用。

我假設你有一個AJAX的行動,像「actionMarkRead()」你所呼叫時,用戶點擊。我假設這設置了某個數據庫字段,說用戶有「讀取」該項目。 爲了與CListView中這項工作,只是確保該CDataProvider有condition檢驗這些「讀」字段(可能需要加入一個表,我不知道你的數據庫是什麼樣子)。然後,當列表通過AJAX重新加載時,它將具有正確的頁面數來表示CDataProvier查詢返回的較少頁數。

我只是測試這和它的作品!

我測試了它是我成立了一個CGridView與'ajaxUpdate'=>true,的方式。然後在我的CDataProvider中,我設置了'pagination'=>1以便測試。然後我使用我的控制器中的默認AJAX actionDelete刪除項目。每當我通過CGridView中的AJAX動作鏈接刪除一個項目時,通過AJAX刷新網格並將頁面數縮減1。似乎像魅力一樣工作!

乾杯,祝你好運!

+1

Kor,你剛剛從yii專家那裏得到了Stack Overflow的答案。心懷感激!非常感激。 ;) – 2011-06-07 21:07:43

+0

哈哈感謝k,這麼好評!不想讓這個去我的頭上:p – thaddeusmt 2011-06-07 21:50:48

+0

哇,好的,謝謝,我會在一分鐘內試一試。然而,只有一種想法可能不明確; actionMarkRead()在每個模塊中,從每個模塊的特定JavaScript調用(是的,這不是我能做的最好的),每次模塊加載時加載它。不過,我會兩次檢查CGridView,因爲它似乎是我最好的選擇。我會在一秒鐘之內告訴你一件事! – Korcholis 2011-06-08 07:52:51