Pull to refresh

Comments 34

У вас нельзя загрузить ветку дерева — всегда выгребается всё меню. Да и вообще тут очень специфический пример использования дерева. В любом случае, спасибо.
спасибо за идею, нужно будет реализовать)
кажется то что нужно, описывал на примере CakePHP,

Cakephp TreeBehavior и отдельная ветка
По моему не хватает комментов в коде для тех, кто в танке.
А самообъединения использовать совсем не вариант?
На момент написания этого текста, Я, к сожалению, ничего не знал про самообъединения. Буду благодарен если Вы приведете свой вариант построения деревьев с самообъединениями)
Вам ниже уже ответили. Кстати, в русском языке, в отличие от английского, «я» пишется с маленькой буквы.
Собственно, вот: dev.mysql.com/tech-resources/articles/hierarchical-data.html

> остальные же, деревья строили с кучей запросов к БД, но я верил что есть способ построить сколь угодно огромное дерево всего в 1 запрос,

Вы перенесли логику в код, вместо БД, только и всего.
Чем не устроил вариант с materialized path для постороения дерева меню?
торжественно заявляю: Существует куча способов построения деревьев.

Надо было не торжественно заявлять а сделать сравнительный анализ, рассказать про другие методы, чем они вас не устроили, и как эти проблемы решены в вашем методе, а не делать топик, состоящий из одной портянки без единого комментария
Получите портянку с кучей комментариев и распишитесь!)
Тут народ въедливый! Деревьями никого не удивить.
Каждый должен построить дерево :)
вырастить живот и посадить печень
какие у Вас нехорошие стереотипы)
Я и не собирался никого удивлять, этот пост был своеобразным ответом на тот пост, только и всего)
Жизнь циклична и каждый раз кто-то открывает для себя сто лет как изученное и описанное, выдавая это за какое-то открытие. Мой вам совет, ознакомьтесь с Nested Sets, они лишены всех неудобств вашего способа.
Например: php.russofile.ru/ru/authors/sql/nestedsets01/
Видите ли в чем дело. Я такой человек, который предпочитает изначально изобрести свой велосипед, вместо того, чтобы использовать что-то уже кем то придуманное или изобретенное. Я не всегда считаю, что мой велосипед получится более легким и удобным чем тот, что уже кем то изобретен и построен, но зато я буду знать принцип его работы, а это опыт.
Меня откровенно бесит, что когда появляется какая то технология, или язык, появляются те, кто начинают орать что-то типа «пока не появится фреймворк, я это использовать не буду!».
Каждому свое короче)
причем тут фреймворк? я вполне понимаю желание изобрести свою реализацию чего-либо, но какой смысл переизобретать давно известный алгоритм? особенно когда он отлично реализован несколькими способами? ладно, когда вы делаете это в свободное время, а многие умудряются свои амбиции за счет рабочего времени реализовывать, что печально
в целях саморазвития)
Ну так саморазвивайтесь, зачем тратить чужое время, публикуя статью?

А в целях саморазвития может быть полезнее разобраться в чем-то существующем, чем изобретать велосипед в вакууме. Ведь чтобы изобретать не велосипеды, а хорошие полезные вещи, нужно владеть информацией о том, как все устроено, как задачу принято решать сейчас. И уже осмысленно к вопросу подходить.

Не стоит строить иллюзий о том, что изобретение своих велосипедов в вакууме — это учеба и развитие. Это просто способ потешить свое эго и «срезать углы». Конечно, разобраться в алгоритмах и общепринятых подходах, получить новые знания — это сложнее, чем сделать очередную недоделку. Сложнее по многим причинам: придется научиться читать код, например. Если знания есть, то другое дело, вперед: реализуйте другие подходы (понимая, чем они лучше или хуже, в каких ситуациях больше подходят), улучшайте, упрощайте.

Аргументация на уровне «я сделал это для саморазвития, т.к. не люблю использовать уже придуманное» — равносильна «я не разбираюсь в вопросе, о котором пишу, а значит потратил ваше время впустую, но ни капли об этом не сожалею».

Извините уж, если это все звучит грубо, вы можете быть отличным человеком, но вопрос тут технический.
Я никого не заставляю читать эту статью, как и никому не навязываю своего способа решения задачи. В правилах хабра писать такие статьи не запрещается)
// если $return_as_list == true возвращаем меню в виде обычного списка
if(is_bool($return_as_list) && $return_as_list)

Может быть так?
if(TRUE === $return_as_list)

И дальше
// иначе, если $return_as_list == false возвращаем дерево меню
else if(!$return_as_list)
у вас переменная может быть и NULL, и 0, и ''.
Советую быть внимательнее с приведением типов.

Человек хочет изобрести всё самостоятельно. Это всё равно что не ходя в школу самому изобретать сложение/произведение/степень/диффуры/интегралы. А потом на хабре писать что-то вроде:

Уау! Я изобрёл способ который позволяет прибавить одно и тоже число несколько раз. Я назвал его мульти-сложением. С его помощью можно легко вычислить площадь прямоугольника! Это мой ответ тому челу, который изобрёл многократное-сложение. Под катом табличка 10х10.
Автор, а Вам не кажется, что сначала надо поднять уровень кодинга и оформления самого кода, прежде чем постить такие шедевры на Хабр?
А если слегка подумать, то не надо быть гением, что бы заведомо определить судьбу данного поста.
Век живи — век учись.
И что же Вас конкретно в моем уровне кодинга не устроило?
Не правильное оформление phpDoc.
@param int Id ленты меню для загрузки

О тернарных операторах, вы, наверное, вообще не слышали?
if($levels == null)
{
$a[] = $item;
}

Эта конструкция вообще убила… No comments
if(is_bool($return_as_list) && $return_as_list)

О правилах именования приватных и защищённых методов вы также не знаете
private function GetMenuChilds($p_id, $menuList, $levels = null)

Почему в одном случае у вас нет пробела перед аргументом, а дальше есть?
$this->GetMenuChilds(0,$ml, $return_as_list);

Настоятельно рекомендую пересмотреть паровоз из if, else if, else. Вы слышали о switch/case?

В полной же совокупности на код противно смотреть.
Я достаточно привёл аргументов.
читайте мой камент ниже)

ps:// «Есть одно «золотое» правило: Критикуя — предлагай!» — это намек
>>Эта конструкция вообще убила… No comments
>>if(is_bool($return_as_list) && $return_as_list)
Что здесь такого криминального?

>>О правилах именования приватных и защищённых методов вы также не знаете
Не знаю, расскажите?

>>Почему в одном случае у вас нет пробела перед аргументом, а дальше есть?
>>$this->GetMenuChilds(0,$ml, $return_as_list);
А почему некоторые люди, а возможно и вы говорите не фольклор а фольклёр? :)

>>Настоятельно рекомендую пересмотреть паровоз из if, else if, else. Вы слышали о switch/case?
Более того, я их даже использую.

В полной же совокупности навязывать своё мнение — плохой тон.
Я пишу так, как мне удобно. Код вполне читаем.
Я уже предложил и отметил явную неграмотность написания кода.
Не моё дело заниматься обучением кого-либо здесь.
Если человек не дурак и готов совершенствоваться, но он сам определит для себя пути развития.
На хабре более чем достаточно полезных постов от умных людей, не говоря уже о комментах.
Не поленись изучить эти моменты.
У меня всё.
Я лично не считаю, что случайные пропуски пробелов, названия методов с большой буквы, и ошибка в описании одного метода говорят о грамотности кода. Люди ошибаются, я не верю, что Вы все всегда делаете правильно)

В слюбом случае, спасибо, и успехов Вам, а я поехал на природу)
А, потом, другие программисты сидят и исправляют «случайно» криво-написанный код. Скрипты случайно тормозят сервер, случайно проходят SQL инъекции, XSS и т.д. А клиент, случайно недоволен, что сайт работает случайно через жопу. Случайно обращается в другую контору или фрилансеру и говорит, что случайно заплатил кучу бабок за это опять же случайное «говно». А ему отвечают: Это не случайно, а закономерно.
Сегодня ты пробел забыл поставить, а завтра родине изменишь?! :)

P.S: свою работу надо случайно любить, делать её качественно, совершенствоваться и уметь воспринимать критику, особенно, когда делают замечания по-существу. Не зря ваш пост случайно заминусовали. Или вы думаете, что здесь сидят уроды и отщепенцы, у которых так и чешутся руки, что бы кому-нибудь насовать минусов?
>>уроды и отщепенцы, у которых так и чешутся руки, что бы кому-нибудь насовать минусов?
увы:))

от того что пропущен пробел, или ошибка в phpdoc этот скрипт медленнее работать не будет;)
Sign up to leave a comment.

Articles