Конечно просто романтика сидеть и вручную восстанавливать дерево из 60 элементов только потому, что phpMyAdmin не обновлён и не сохраняет аяксом изменяемые ячейки. Мне лично гораздо приятнее отремонтировать дерево из 1000 элементов одним нажатием кнопки, как это и было задумано, но работало не так, как хотелось бы.
Открываем файл: /admin/applets/repairnested.php
Перед строкой:
Вставляем:
И строку:
Меняем на:
Собсно всё, после этого не боясь жмём кнопку восстановления и получаем рабочее дерево. (Всё таки лучше сделать бекап перед этим)
//Вы всё выполняете на собственный страх и риск. Автор за Ваши действия ответственности не несёт — лично у меня всё работает.
Открываем файл: /admin/applets/repairnested.php
Перед строкой:
function repairNestedSet($table){
function tree_all_ns($s_table, $i_value = 1, $k_parent = 0, $lvl = 0){ $inDB = cmsDatabase::getInstance(); $r = $inDB->query("SELECT id FROM {$s_table} WHERE parent_id='{$k_parent}' ORDER BY NSLeft ASC, ordering ASC"); if(!$r)return false; $count = $inDB->num_rows($r); $o = 1; while ($f = $inDB->fetch_assoc($r)){ $k_item = $f['id']; $i_right = tree_all_ns($s_table, $i_value + 1, $k_item, $lvl+1); if($i_right === false)return false; if(!$inDB->query("UPDATE ".$s_table." SET NSLeft='".$i_value."', NSRight='".$i_right."', ordering = '".$o++."', NSLevel = '{$lvl}' where id='".$k_item."'"))return false; $i_value = $i_right + 1; } return $i_value; }
repairNestedSet($tables[(int)$table_id]);
if(tree_all_ns($tables[(int)$table_id]['name']) !== false)cmsCore::addSessionMessage($tables[(int)$table_id]['title'].' '.$_LANG['AD_RESTORED'], 'success');
//Вы всё выполняете на собственный страх и риск. Автор за Ваши действия ответственности не несёт — лично у меня всё работает.
Реклама #
eoleg 10 лет назад #
ну и наверное хак под 1.10.3
lokanaft 10 лет назад #
Александр 10 лет назад #
Хотя деревья не слетали, последнее время, ипроверить неначем, всё равно огромная благодарность и много плюсов, потому как раньше приходилось всё восстанавливать вручную.
Любаня 10 лет назад #
Су-27 10 лет назад #
Max 10 лет назад #
Def 10 лет назад #
Александр 9 лет назад #
P.S. только первый раз был не внимательным и не сразу сообразил, что вставить код нужно перед строкой, а то привык всегда после вставлять. Моя не внимательность. Большой респект, одним кликом починил своё меню которое давно нужно было починить.