作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个表是 editable和 sortable .该表有 2 种类型的项目 parent 和 child 。我希望用户能够在更新订单的同时在两者之间切换并在两者之间拖动。数据库表类似如下。
+-------------------------------------------------------+-----------+
|id | userid | item | parent | item order | parent_id |
+-------------------------------------------------------+-----------+
|23 | 5 | cheese burger |false | 2 | 128 |
+-------------------------------------------------------+-----------+
|128| 5 | Burgers |True | 0 | 0 |
+-------------------------------------------------------+-----------+
|10 | 5 | Hamburger |false | 1 | 128 |
+-------------------------------------------------------+-----------+
|25 | 5 | steak burger |false | 3 | 128 |
+-------------------------------------------------------+-----------+
|90 | 5 | fish burger |false | 4 | 128 |
+-------------------------------------------------------+-----------+
|29 | 5 | fries |True | 5 | 0 |
+-------------------------------------------------------+-----------+
|22 | 5 | cheese Fries |false | 6 | 29 |
+-------------------------------------------------------+-----------+
|987| 5 | french fries |false | 7 | 29 |
+-------------------------------------------------------+-----------+
这会给我一个像这样的菜单....
BURGERS
Hamburger
Cheese burger
Steak burger
Fish burger
FRIES
Cheese fries
French fries
大写表示标题*
我可以得到正确的顺序,没问题。我的脚本POST
是项目顺序的数组。
Array
(
[0] => 128
[1] => 10
[2] => 23
[3] => 25
[4] => 90
[5] => 29
[6] => 22
[7] => 987
)
然后我更新数据库以反射(reflect)这一点,类似于...
UPDATE menu SET item_order = '0' WHERE item = '128'
UPDATE menu SET item_order = '1' WHERE item = '10'
UPDATE menu SET item_order = '2' WHERE item = '23'
UPDATE menu SET item_order = '3' WHERE item = '25'
UPDATE menu SET item_order = '4' WHERE item = '90'
UPDATE menu SET item_order = '5' WHERE item = '29'
UPDATE menu SET item_order = '6' WHERE item = '22'
UPDATE menu SET item_order = '7' WHERE item = '987'
我遇到困难的地方是正确设置父 ID。我尝试了各种疯狂的方法,找到了 parent ID
然后做一个< >
有点东西,但似乎没有什么能始终如一地正确。你可以拖动一个标题,这会搞砸 children 。即所有的 child 都将采用拖动的标题。你会如何处理这个问题?当添加新项目或拖动项目时,就会发生上述更新。
编辑
这似乎可行......
$order = "SELECT itemOrder, itemId, header from menuItems && user = $user order by itemOrder";
$order_query = mysql_query($order);
while($order_result = mysql_fetch_array($order_query))
{
$parent = $order_result['header'];
if ($parent == 'true')
{
$current_parent = $order_result['itemId'];
}
$item_id = $order_result['item_id'];
$parent_update = "UPDATE menuItems SET parent = '$current_parent' WHERE itemId = $itemId";
mysql_query($parent_update);
最佳答案
由于菜单可能不是层次结构,我想知道有两个表是否更容易,一个包含标题,另一个包含项目。
不过,对于这个解决方案来说,这并不重要。
关于parentid:
假设每个不是父项的项目本身都应该有一个父项,您可以循环遍历发布订单中的所有项目并应用此(伪代码)逻辑:
$parentId = null;
loop through items:
if item->type == header:
set $parentId to item->id
update sort order
else (item is.. well, item)
check if $parentId !== null. Fail otherwise (item above first header)
update sort order and parentId
关于php - 谜语我这个。 PHP 脑筋急转弯,可排序,可编辑表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7053362/
我是一名优秀的程序员,十分优秀!