我为我的一个客户编写了一个简单的CMS,它专门满足他的需求(没有他永远不会使用的主流内容管理系统)。
CMS使他能够创建和管理两种类型的内容:页面和新闻(侧边栏中显示的短消息)。
页面按字母顺序显示在网站的导航菜单中。我的客户希望能够以自定义顺序对页面进行排序。
以编程方式执行此操作的最佳方法是什么?我正在考虑在页面表中添加一个名为“priority”的列。它将是一个数字,页面将根据此数字按升序或降序排序。客户可以为每个页面编辑这个号码吗?
好奇你对此有何想法?有一个更好的方法吗?为此目的的一些设计模式?
答案 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
,因为在知道精度不足之前,小数精度将允许它们执行此类操作很多次。您始终可以创建维护脚本以按顺序获取数据并分配新值 - 这可以每月运行一次,也可以每年运行一次。
这不是花哨,但实施起来很便宜。