如何在CMS中订购页面?
我为我的一位客户编写了一个简单的CMS,他专门做了他所需要的内容(没有他永远不会使用的主流内容管理系统的膨胀)。如何在CMS中订购页面?
CMS使他能够创建和管理两种类型的内容:页面和新闻(在侧边栏中显示的短消息)。
页面按字母顺序排列显示在网站的导航菜单中。我的客户希望能够按照自定义顺序对页面进行排序。
以编程方式执行此操作的最佳方法是什么?我正在考虑在pages表中添加一个名为“priority”的列。这将是一个数字,页面将根据此数字进行升序或降序排序。客户可以为每个页面编辑此编号?
只是好奇你对此有什么想法?有一个更好的方法吗?为此目的的一些设计模式?
我个人使用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);
}
}
它可能会比一个漂亮的设计模式更“快“东经脏”,但它的作品。
即使我以一种不同的方式实现它,我使用了jquery ui sortable插件。谢谢:) – 2009-11-06 19:32:17
如果我在预算中,我会给用户一个字段来编辑或控制。简单的方法是一个整数字段,其中的值可以被复制 - 让他们选择数字并手动输入字段。很明显,这是一个快速和肮脏的修复方法 - 如果用户设置了一个大页面序列,然后想在特定插槽中添加一些内容,这是一个问题 - 优先级值相等,因此您必须对其进行排序在别的东西上。
使用浮点值是另一种可能性。在这种情况下,你不让用户看到数字。如果用户想要在项目A和项目B之间放置项目C,则可以将优先级设置为C=(A+B)/2
,因为知道小数精度会让您在用完精度之前执行此类操作多次(许多)次。您始终可以制作维护脚本以便按顺序获取数据并分配新值 - 可以每月运行一次,甚至每年运行一次。
这不是花哨的,但实施起来很便宜。
我使用jQuery排序插件,因此用户可以在管理面板中拖放页面,并且每次用户使用鼠标拖放页面时,都会使用AJAX将新页面顺序保存到数据库。这比我预期的要容易。 – 2009-11-06 21:01:39
哦,太好了!我在AJAX上很弱,所以我倾向于认为这很难。你得到了两全其美 - 好*和*便宜。这就是你想要做的事情,对你有好处。 – 2009-11-07 05:35:39
'他从来不会使用'膨胀'对'客户希望能够对页面进行排序' - 这只是更多的第一轮... – 2009-11-06 16:33:30
不是,他已经使用网站并在那里添加内容。这只是一个小修改(我使用了一个框架,因此我很容易做出这样的小改动)。对我来说这是没有问题的,我只是想听听其他人如何解决这个问题。 – 2009-11-06 16:36:40