"От нашего огорода вашему... саду..." (ремонтник деревьев)

+39
1.71K
Конечно просто романтика сидеть и вручную восстанавливать дерево из 60 элементов только потому, что phpMyAdmin не обновлён и не сохраняет аяксом изменяемые ячейки. Мне лично гораздо приятнее отремонтировать дерево из 1000 элементов одним нажатием кнопки, как это и было задумано, но работало не так, как хотелось бы.

Открываем файл: /admin/applets/repairnested.php
Перед строкой:
  1. function repairNestedSet($table){
Вставляем:
  1. function tree_all_ns($s_table, $i_value = 1, $k_parent = 0, $lvl = 0){
  2.  
  3. $inDB = cmsDatabase::getInstance();
  4.  
  5. if(!is_numeric($k_parent) || !is_numeric($i_value))return false;
  6.  
  7. $r = $inDB->query("SELECT id FROM {$s_table} WHERE parent_id='{$k_parent}' ORDER BY NSLeft ASC, ordering ASC");
  8. if(!$r)return false;
  9.  
  10. $count = $inDB->num_rows($r);
  11. $o = 1;
  12. while ($f = $inDB->fetch_assoc($r)){
  13. $k_item = $f['id'];
  14. $i_right = tree_all_ns($s_table, $i_value + 1, $k_item, $lvl+1);
  15. if($i_right === false)return false;
  16.  
  17. if(!$inDB->query("UPDATE ".$s_table." SET NSLeft='".$i_value."', NSRight='".$i_right."', ordering = '".$o++."', NSLevel = '{$lvl}' where id='".$k_item."'"))return false;
  18.  
  19. $i_value = $i_right + 1;
  20. }
  21. return $i_value;
  22.  
  23. }
И строку:
  1. repairNestedSet($tables[(int)$table_id]);
Меняем на:
  1. if(tree_all_ns($tables[(int)$table_id]['name']) !== false)cmsCore::addSessionMessage($tables[(int)$table_id]['title'].' '.$_LANG['AD_RESTORED'], 'success');
Собсно всё, после этого не боясь жмём кнопку восстановления и получаем рабочее дерево. (Всё таки лучше сделать бекап перед этим)

//Вы всё выполняете на собственный страх и риск. Автор за Ваши действия ответственности не несёт — лично у меня всё работает.
0
eoleg eoleg 7 лет назад #
+
ну и наверное хак под 1.10.3
0
lokanaft lokanaft 7 лет назад #
Вообще оно будет работать везде, где было восстановление деревьев.
+1
Александр Александр 7 лет назад #
Очень полезная доработка.
Хотя деревья не слетали, последнее время, ипроверить неначем, всё равно огромная благодарность и много плюсов, потому как раньше приходилось всё восстанавливать вручную.
+2
Любаня Любаня 7 лет назад #
Какое изящное решение! Интересно, почему так долго никто не исправлял этот момент таким вот образом? scratch Прям каждый раз как заходила смотреть порядок в деревьях, сердце екало laugh Теперь можно расслабиться joke
0
Су-27 Су-27 7 лет назад #
Вот за это спасибо - легко и просто laugh
+1
Max Max 7 лет назад #
Спасибо! Работает. Теперь можно поменять сообщение в \languages\ru\admin\applets\applet_repairnested.php на "Жми не парься!"
0
Def Def 7 лет назад #
на 1.10.4 не работает:(
0
Александр Александр 6 лет назад #
Lokanaft огромное вам спасибо, отличное дополнение.

P.S. только первый раз был не внимательным и не сразу сообразил, что вставить код нужно перед строкой, а то привык всегда после вставлять. Моя не внимательность. Большой респект, одним кликом починил своё меню которое давно нужно было починить.

Еще от автора

Ajax подгрузка контента для двойки
Ну что, товарищи, сегодня вы своими руками сможете сделать ajax подгрузку записей контента.
AJAX подгрузка комментов для двойки
Как следует из названия, дополнение ограничивает полный вывод всех комментов записи и позволяет пользователю при необходимости посмотреть следующие.
ContentWatch - проверка уникальности добавляемого контента для icms2
Компонент позволяет проверять уникальность текста с помощью сервиса Content-Watch.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.