Утилита "Ремонтник Деревьев"

+62
4.66K

Утилита "Ремонтник Деревьев"

Посвящение.Эту утилиту я посвящаю биологине, красавице и молодой маме Ленке Леонидовне Шишловской.
Эта утилита представляет собой "костыль", написанный на скорую руку. Меня прижала эта проблема на проекте, над которым я сейчас работаю. На форуме я встречал упоминания об аналогичных проблемах у других пользователей, поэтому делюсь этой утилиткой.

Как утилита работает

Утилита показывает и исправляет все дерево целиком. В отличие от phpMyAdmin, где отредактировать можно только одну запись, здесь меняется вся таблица. Это позволяет охватить все дерево одним взглядом, что не в пример удобнее. Пользуясь утилитой, я исправил дерево на своем сайте за пару минут, хотя перед этим через "еш твою медь" пытался сделать это в phpMyAdmin целый вечер))). Скриншот можно увидеть чуть ниже, где приведены примеры.

Безопасность и прочие предупреждения.

Поскольку писалась утилита для админа, который и так имеет доступ к своему сайту через FTP и к БД через phpMyAdmin, я посчитал излишним делать эту утилиту в расчете "на дурака". Утилита не содержит никаких проверок на правильность введенных данных — что ввели, то она и запишет, если сервер БД с вами согласится. Поэтому не заполняйте поля ерундой, это же ваш сайт! Не оставляйте утилиту в корне вашего сайта, после того, как закончили с ней работу. Закончили — удаляйте!

И естественно, я не принимаю никаких претензий, если вы, спьяну или сдуру, обвалите свой сайт моей утилитой. Это — инструмент админа, который просто делает вашу работу удобной, но решение принимаете вы сами!

Настройки

Все настройки внутри файла trees_repairer_icms_1_10_3.php. Открывайте любым редактором и настраивайте. В файле все настройки снабжены комментариями, а в архиве подробнейшая инструкция.

Как работать с утилитой.

Подробная инструкция внутри архива. Скачайте архив, распакуйте куда нибудь, и перебросьте в корень сайта файл trees_repairer_icms_1_10_3.php. Затем наберите в браузере адрес_сайта.ru/trees_repairer_icms_1_10_3.php и работайте. Поработали — удаляйте!

Дизайн

Я не дизайнер, поэтому претензии на плохой дизайн утилиты не принимаю. Нечего ею любоваться — выполнили работу — удаляйте!

Примеры правильных и неправильных деревьев.

Ниже показан пример правильного дерева свежеустановленного сайта. Как видим, родительская категория Фото с id=20 имеет две дочерние категории Новые фото(id=42) и Лучшие фото (id=43). Каждая из них ссылается на родителя и имеет parent_id=20. Родитель имеет NSLevel 1, дети каждый по 2. Теперь смотрим на поля NSLeft и NSRight. Невооруженным взглядом видно, что эти значения идут подряд, причем родитель "охватывает" своими значениями значения детей. То есть первое значение NSLeft у родителя 14, затем идут NSLeft 15 и NSRight 16 первого ребенка, затем 17 и 18 второго ребенка и наконец, идет NSRight родителя со значением 19:
Иллюстрация

Теперь более сложный пример. Тоже правильное дерево. Родитель Статьи с id=21 имеет четырех детей с id 39, 40, 41 и 44. Родитель имеет уровень 1, дети 2. NSLeft и NSRight тоже идут у них подряд: (4(5,6)(7,8)(9,10)(11,12) 13). Как видим, родитель опять охватывает детей своими NSLeft и NSRight:
Иллюстрация

Легко сообразить, что если дерево трехуровневое, то родитель первого уровня охватывает всех своих детей, а родитель второго уровня только своих детей третьего уровня. Ну, и так далее.

Ну, и наконец, неправильный пример. Взято с моего проекта, над которым я сейчас работаю. Такое дерево образовалось после того, как я немного подвигал пункты меню вверх вниз в админке, а потом, когда увидел сообщение об ошибках деревьев, сдуру нажал на кнопку "исправить ошибки". Утилиты у меня тогда не было — и вот что получилось:
Иллюстрация

Как скачать.

Скачать можно тут.

Куда говорить спасибо

яд 410011913797936
wmr 342960323367

Удачи в программировании!
+1
Imran Imran 10 лет назад #
огромный + за утилиту
-1
lokanaft lokanaft 10 лет назад #
Можно было бы обновить phpMyAdmin - там поля редактируются и сохраняются по клику на поле, не переходя в редактирование scratch
+4
Странник Странник 10 лет назад #
Конечно можно, кто спорит? Вот только пока сидишь и анализируешь проблему, кончается время сессии, и хостер предлагает еще раз ввести пароль. Естественно, все изменения, что внес, испаряются в астрал, а у тебя на душе добавляется позитива. Мне табличку "Сарказм" поднимать?
Я для чего, думаете, утилиту писал, от того, что мне делать нечего? С утилитой подобной проблемы нет.
-2
lokanaft lokanaft 10 лет назад #
Какой астрал, если на аяксе сохранение происходит. Мне Вам опять видео демонстрацию записать?
-2
lokanaft lokanaft 10 лет назад #
Хотя даже снимать не надо: http://www.youtube.com/watch?feature=player_detailpage&v=g21zYqfHCkw#t=6
+1
Су-27 Су-27 10 лет назад #
Спасибо коллега + hoho
+1
Max Max 10 лет назад #
Недавно была аналогичная проблема, пришлось переделывать все меню в ручную. Сейчас количество пунктов меню выросло в несколько раз.
Выполнил в админке проверку деревьев, были найдены ошибки в дереве меню, хотя сами меню работают нормально.
Вопрос к уважаемым специалистам: как эти ошибки могут повлиять на работу сайта если визуально все ок?
+2
Странник Странник 10 лет назад #
Я когда исправил дерево на своем проекте (своей же утилитой естессно), сообщение об ошибке дерева пропало. Дерзайте, но не забывайте перед началом работы снять с таблицы дамп.
+2
Крот Крот 10 лет назад #
кривая архитектура приводит ко многим костылям)

за утилитку плюсанул, удобство ускоряет работу
0
Странник Странник 10 лет назад #
для удобства (себя любимого) утилита и создавалась! не знаю, как кому, а я был доволен, когда за четыре минуты решил проблему, над которой страдал три вечера в phpMyAdmine))
+1
lezginka.ru lezginka.ru 10 лет назад #
+
навряд ли я смогу воспользоваться, но из-за кривых/битых деревьев пару раз пришлось сайт с нуля инсталлировать и добавлять вручную контент
+1
Lora Lora 10 лет назад #
Спасибо, странник.Молодец.Сказал-сделал.Мужчина.
+2
Странник Странник 10 лет назад #
Мне Oll велела утилиту называть "Садоводом"!
+1
Димитриус Димитриус 10 лет назад #
А разве это не ОН ? =)
+2
Димитриус Димитриус 10 лет назад #
=) точно
+1
Azura Azura 10 лет назад #
Супер! Уже скачала! На первой ветке системы эта утилита то что надо!
0
Странник Странник 10 лет назад #
собственно, проблемы начались с 1.10.3. я тикет написал, надеюсь Fuse пофиксит к 1.10.4
0
VopisUVD VopisUVD 10 лет назад #
эта проблема еще с 1.8 тащится... И создает порой много проблем.
Сенкс за утилиту...
0
Странник Странник 10 лет назад #
Может быть и с более раннего времени...Потому что, в отличии от Джумлы, в Инстанте можно создать любое количество уровней вложения. Лично я столкнулся с этой траблой вот сейчас. И исправил проблему, как умею - подперев хромую ногу костылем)))
0
vicoder vicoder 10 лет назад #
Я заметил, что ломка деревьев происходит из-за ошибки в функции $ns->MoveNode при перемещении раздела сверху вниз.

саму ошибку, не нашел. однако написал такой костыль: (вызывается после $ns->MoveNode в коде с перемещением раздела)

Код PHP:
  1. //ВНИМАНИЕ!!!!!!
  2. //иногда почему то возниакет ошибка при перемещении категории в поле NSLeft неправильно проставляется значения
  3. //исправления от Vicoder
  4. $sql_select = "SELECT * FROM {$base} WHERE parent_id = {$parent_id} ORDER BY ordering";
  5. $rs = $inDB->query($sql_select);
  6. if ($rs)
  7. {
  8. $index = 0;
  9. while($cat = $inDB->fetch_assoc($rs)) {
  10. if($index==0) $Right = (int)$cat['NSRight'];
  11. else {
  12. $inDB->query( "UPDATE {$base} SET NSLeft = ".($Right+1)." WHERE id={$cat['id']}");
  13. $Right = $cat['NSRight'];
  14. }
  15. $index++;
  16. }
  17. }

вроде больше не стали ломаться деревья
0
platon platon 10 лет назад #
и куда это вставить
0
CMS Admin CMS Admin 10 лет назад #
/admin/applets/menu.php
0
Андрей Андрей 10 лет назад #
этот хак, я так понимаю, должен решить проблему поломки дерева меню в дальнейшем, при любых операциях?
потому что очень часто поломка возникает, когда начинаешь формировать структуру и перемещаешь какой нибудь пункт на 5-6 позиций, особенно вверх...
0
CMS Admin CMS Admin 10 лет назад #
Можно пояснить, что именно означают NSLeft и NSRight? Количество пунктов меню до и после текущего?
+1
Странник Странник 10 лет назад #
Нет. Это "координаты" элемента на дереве.
+1
CMS Admin CMS Admin 10 лет назад #
Кажись врубился, по крайней мере свое меню проблемное восстановил
0
Евгений Фоменко Евгений Фоменко 10 лет назад #
Я смотрю все говорят о деревьях меню? Каталог таким образом можно лечить?
0
Евгений Фоменко Евгений Фоменко 10 лет назад #
Ага, утилита лечит все и вся! Супер. Отпишусь о результате, у меня 500 рубрик до 3 уровня вложенности, заново я такую работу переделывать не буду, надеюсь просто вылечить...
0
Странник Странник 10 лет назад #
Да.
0
Евгений Фоменко Евгений Фоменко 10 лет назад #
Сильно много рубрик, тяжело сообразить что и после чего идёт. Завтра до обеда если не осилю, буду делать по плану Б...
0
Странник Странник 10 лет назад #
Рекомендую взять бумагу в клеточку и писать на ней значения NSLeft и NSRight. Причем каждый новый уровень на следующей строчке. Вы визуально увидите, как родитель охватывает детей своими значениями. Я так делал, когда исправлял деревья на своем сайте.

Хочу сделать, чтобы утилита тоже такое показывала, но катастрофически не хватает времени. Уж простите, придется вам на бумаге рисовать что-то похожее на
(1 8)
(2 5)(6 7)
(3 4)
Здесь, как видите, трехуровневое дерево, родитель 1-8 имеет двух детей 2-5 и 6-7, а 2-5, имеет ребенка 3-4. Везде принцип одинаков.
0
Евгений Фоменко Евгений Фоменко 10 лет назад #
Спасибо, я как и собирался - помучился до обеда, потом плюнул. Открыл все подкатегории каждая в новой вкладке, сбросил все, проверил и потом пересохранил. Ну как-то так )) 3 часа времени ушло. А делать все руками - не вариант, совсем не вариант, поскольку я только на вписывание координат по порядку потратил минут 40 + 1 кофе + 2 перекура.

Зато сейчас откатываю сайт 2-3 раза в день, чтобы ничего не потерять. Количество рубрик удалось уменьшить до +/- 400, дальше по порядку. Сейчас буду искать Ваш клонировщик модулей, мне нужно что-то решать с индексацией, гугл на меня забил...
0
Странник Странник 10 лет назад #
У меня не клонировщик, а Генератор модулей

Все равно, даже с записыванием NSLeft и NSRight от руки получается быстрее, чем заново сайт делать))) Я немного выздоровею, переделаю данную утилиту, чтобы она эту таблицу, что вы от руки писали, сама рисовала....
0
Странник Странник 10 лет назад #
Как и обещал, выкладываю модифицироанную утилиту. Вот про нее статья - как пользоваться и где взять

Еще от автора

Адаптация компонента "Закладки" от 19 января 2011 к коробочной версии 1.10.7
На форуме появилась тема с пожеланиями адаптировать довольно старый компонент "Instant Bookmarks" Fuze к современным реалиям.
Утилита "Садовод" для версии InstantCMS 1.10.7.008
В этой краткой заметке описывается утилита "Садовод" для ремонта деревьев версии InstantCMS 1.10.7.008.
Изменение компонента "Баннеры" для будущей  версии 1.10.7.008
Данная статья рассказывает всем ждущим новую версию 008, что нового ожидается в будущем релизе версии 1.10.7.008.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.