2009-11-06 75 views
2

我爲我的一位客戶編寫了一個簡單的CMS,他專門做了他所需要的內容(沒有他永遠不會使用的主流內容管理系統的膨脹)。如何在CMS中訂購頁面?

CMS使他能夠創建和管理兩種類型的內容:頁面和新聞(在側邊欄中顯示的短消息)。

頁面按字母順序排列顯示在網站的導航菜單中。我的客戶希望能夠按照自定義順序對頁面進行排序。

以編程方式執行此操作的最佳方法是什麼?我正在考慮在pages表中添加一個名爲「priority」的列。這將是一個數字,頁面將根據此數字進行升序或降序排序。客戶可以爲每個頁面編輯此編號?

只是好奇你對此有什麼想法?有一個更好的方法嗎?爲此目的的一些設計模式?

+2

'他從來不會使用'膨脹'對'客戶希望能夠對頁面進行排序' - 這只是更多的第一輪... – 2009-11-06 16:33:30

+0

不是,他已經使用網站並在那裏添加內容。這只是一個小修改(我使用了一個框架,因此我很容易做出這樣的小改動)。對我來說這是沒有問題的,我只是想聽聽其他人如何解決這個問題。 – 2009-11-06 16:36:40

回答

7

我個人使用jQuery ui sortable插件。客戶端可以拖放列表中的項目,更改順序。

接下來,我再次使用jQuery來遍歷項目列表,編譯id的CSV列表並將其發送到服務器。

var imageList; 

function init() { 
    imageList = $("#imagelist"); 

    if(imageList.length > 0) { 
     imageList.sortable({stop:onStopSorting}); 
    } 
} 

function onStopSorting() { 
    var datas = imageList.find("span.data"); 
    var result = new Array(); 
    for(var i = 0; i < datas.length; i++) { 
     result.push(datas.eq(i).html()); 
    } 
    $("#imageSort").val(result.join(",")); 
} 

,並在服務器上:

if(isset($_REQUEST["imageSort"]) && $_REQUEST["imageSort"] != "") { 
    $imageIdList = explode(",", $_REQUEST["imageSort"]); 

    for($i = 0; $i < count($imageIdList); $i++) { 
     $this->setImagePriority($imageIdList[$i], $i+1); 
    } 
} 

它可能會比一個漂亮的設計模式更「快「東經髒」,但它的作品。

+0

即使我以一種不同的方式實現它,我使用了jquery ui sortable插件。謝謝:) – 2009-11-06 19:32:17

4

如果我在預算中,我會給用戶一個字段來編輯或控制。簡單的方法是一個整數字段,其中的值可以被複制 - 讓他們選擇數字並手動輸入字段。很明顯,這是一個快速和骯髒的修復方法 - 如果用戶設置了一個大頁面序列,然後想在特定插槽中添加一些內容,這是一個問題 - 優先級值相等,因此您必須對其進行排序在別的東西上。

使用浮點值是另一種可能性。在這種情況下,你不讓用戶看到數字。如果用戶想要在項目A和項目B之間放置項目C,則可以將優先級設置爲C=(A+B)/2,因爲知道小數精度會讓您在用完精度之前執行此類操作多次(許多)次。您始終可以製作維護腳本以便按順序獲取數據並分配新值 - 可以每月運行一次,甚至每年運行一次。

這不是花哨的,但實施起來很便宜。

+2

我使用jQuery排序插件,因此用戶可以在管理面板中拖放頁面,並且每次用戶使用鼠標拖放頁面時,都會使用AJAX將新頁面順序保存到數據庫。這比我預期的要容易。 – 2009-11-06 21:01:39

+0

哦,太好了!我在AJAX上很弱,所以我傾向於認爲這很難。你得到了兩全其美 - 好*和*便宜。這就是你想要做的事情,對你有好處。 – 2009-11-07 05:35:39