我正在使用 jQuery Nestable plugin 和 Codeigniter3 为网站创建5个级别的菜单,这是一个很好的解决方案,用户可以单调和删除以更改菜单项的级别和位置 . 但是我的下面的功能只能创建第一级菜单,当我更改为菜单项的子级别(2,3,4,5)时,它对我不起作用 .
Issue 我无法将菜单项从第一级更改为另一级 . 我无法将菜单项反转回 Parent ,如果我已将其更改为任何 parent 的 children . 无论Jquery Nestable如何努力工作 .
以下功能用于将菜单项更新为依赖于Menus列的数据库,如: id , Parent_id , m_order .
此函数将通过 foreach 和 array_key_exists 检查 $List 数组内部,如下所述:
-
使用$ this-> get_child($ this-> input-> post('list'))从 form 获取数组数据;
-
使用 Foreach 和 array_key_exists 函数检查任何 childrent 的 $List 数组,如果找到任何 children ,它将更新到数据库,如下面的CI函数 .
-
并且 if ($parent_id != $item['id']) 不会为父级的当前 id 更新 parent_id .
public function savelist() {
if ($this->input->post('list')) {
$this->do_update($this->input->post('list'));
}
}
public function do_update($list, $parent_id = 0, &$m_order = 0) {
foreach ($list as $item) {
$m_order++;
$data = array(
'parent_id' => $parent_id,
'm_order' => $m_order,
);
if ($parent_id != $item['id']) {
$where = array('id' => $item['id']);
var_dump($data . ':' . $where);
$this->db->where($where);
$this->db->update('nav', $data);
}
if (array_key_exists("children", $item)) {
$this->do_update($item["children"], $item["id"], $m_order);
}
}
}
这个Jquery Nestable Plugin和Ajax函数用于将任何表单数据发送到服务器 .
<script>
$(document).ready(function () {
var updateOutput = function (e) {
var list = e.length ? e : $(e.target), output = list.data('output');
$.ajax({
method: "POST",
url: "savelist",
data: {
list: list.nestable('serialize')
}, success: function (data) { //, textStatus, jqXHR
console.log(list.nestable('serialize'));
}
}).fail(function (jqXHR, textStatus, errorThrown) {
alert(" Unable to save new list order: " + errorThrown);
});
};
$('#nestable').nestable({
group: 1,
maxDepth: 7,
}).on('change', updateOutput);
});
</script>
我怎么只创建一个表来存储所有菜单项 . 并且我在 PHP 中设置条件以检查 Parent 和 Children 当菜单 id equal 到 Parent_id 这是我的表格结构
CREATE TABLE IF NOT EXISTS `nav` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`uid` int(10) NOT NULL,
`text` varchar(500) NOT NULL,
`link` text NOT NULL,
`show_condition` int(5) NOT NULL,
`parent_id` int(5) NOT NULL,
`m_order` int(9) NOT NULL,
`class` varchar(50) NOT NULL,
`data` varchar(50) NOT NULL,
`des` text NOT NULL,
`lang` varchar(50) NOT NULL,
`accord` int(3) NOT NULL,
`footer` int(3) NOT NULL,
`f_sta` int(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
最后我得到了菜单编辑器,如下图所示,我只能更改一个级别的菜单 .
1 回答
我有与你的相同的要求和锻炼,看看我的代码几乎与你的相同,
Here is my Controller:
View set_menu_priority_table.php:
For Update That Priority Add function update_menu_priority in Controller:
And at last ad model function for that update_priority_data:
谢谢,我希望这对你有所帮助 .