Я использую плагин jQuery Nestable с Codeigniter3, чтобы создать 5 уровней меню для веб-сайта, которое может помочь правильному решению пользователя для изменения уровня и положения пунктов меню. Однако моя нижняя функция может создавать только первый уровень меню, и когда я перехожу на суб-уровень (2,3,4,5) пункта меню, он не будет работать для меня.
Проблема Я не мог изменить элемент меню на другой уровень с первого уровня. и я не мог отменить пункт меню до Родитель, если я изменил его как детей любого родителя. Независимо от того, что работает JQuery Nestable, он будет работать.
Эта функция используется для обновления пункта меню до базы данных, которая зависит от Таблица меню: id, Parent_id, m_order.
Эта функция будет проверяться внутри массива $List foreach и array_key_exists как описано ниже:
- получить данные массива из формы с помощью $this- > get_child ($ this- > input- > post ('list'));
- Использование функции Foreach и array_key_exists для проверки любого дочернего массива $List и если он найдет любой children, он будет обновляться до базы данных, как показано ниже. Функция CI.
-
И этот if ($ parent_id!= $item ['id']) {...} не будет обновлять parent_id для текущего 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, чтобы проверить Родительский и Дети, когда меню id равно до 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 ;
Наконец, я получил редактор меню, как показано ниже, что позволило мне изменить только одно меню уровня os.