代码之家  ›  专栏  ›  技术社区  ›  Richard Knop

如何在CMS中订购页面?

  •  2
  • Richard Knop  · 技术社区  · 15 年前

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

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

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

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

    只是好奇你对这个有什么看法?有更好的方法吗?为了这个目的的一些设计模式?

    2 回复  |  直到 15 年前
        1
  •  7
  •   Les    15 年前

    我个人使用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);
        }
    }
    

    它可能比一个好的设计模式更“快而脏”,但它是有效的。

        2
  •  4
  •   Frank DeRosa    15 年前

    如果我在预算中,我会给用户一个字段来编辑或控制。Easy方法是一个整型字段,在该字段中可以复制值,您可以让它们选择数字并手动将其键入一个字段中。显然,这是一个快速而肮脏的修复——如果用户设置了一个大的页面序列,然后想在特定的槽中添加一些内容,这是一个问题——优先级值是相等的,所以您必须对其他内容进行排序。

    使用浮点值是另一种可能性。在这种情况下,您不会让用户看到号码。如果用户希望将项目C放在项目A和B之间,您可以设置 C=(A+B)/2 知道十进制精度会让它们在精度耗尽之前多次(多次)执行这种操作。您总是可以编写一个维护脚本来按顺序获取数据并分配新的值——这可以每月运行一次,甚至一年运行一次。

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