如何在CMS中订购页面?

时间:2009-11-06 16:13:44

标签: php mysql database-design

我为我的一个客户编写了一个简单的CMS,它专门满足他的需求(没有他永远不会使用的主流内容管理系统)。

CMS使他能够创建和管理两种类型的内容:页面和新闻(侧边栏中显示的短消息)。

页面按字母顺序显示在网站的导航菜单中。我的客户希望能够以自定义顺序对页面进行排序。

以编程方式执行此操作的最佳方法是什么?我正在考虑在页面表中添加一个名为“priority”的列。它将是一个数字,页面将根据此数字按升序或降序排序。客户可以为每个页面编辑这个号码吗?

好奇你对此有何想法?有一个更好的方法吗?为此目的的一些设计模式?

2 个答案:

答案 0 :(得分:7)

我个人使用jQuery ui可排序插件。客户端可以从列表中拖放项目,更改顺序。

接下来我再次使用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);
    }
}

它可能比一个漂亮的设计模式更“快”',但它有效。

答案 1 :(得分:4)

如果我的预算有限,我会给用户一个要编辑或控制的字段。 easy方法是一个整数字段,其中值可以重复 - 您可以让它们选择数字并手动将其键入字段。显然,这是一个快速而肮脏的修复 - 如果用户设置了一个大的页面序列,然后想要在特定的插槽中添加一些东西,这是一个问题 - 优先级值相等,那么你必须排序在其他事情上。

使用浮点值是另一种可能性。在这种情况下,您不会让用户看到该号码。如果用户想要在项目A和B之间放置项目C,则设置优先级C=(A+B)/2,因为在知道精度不足之前,小数精度将允许它们执行此类操作很多次。您始终可以创建维护脚本以按顺序获取数据并分配新值 - 这可以每月运行一次,也可以每年运行一次。

这不是花哨,但实施起来很便宜。