Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Оцените скрипт построения списка-дерева |
Автор: LittleFuntik 13.6.2009, 17:47 | ||||||||
Захотел сам, не смотря ни на какие исходники написать скрипт, формирующий список-дерево. Не пугайтесь кода! Он очень шустрый. Я попытался сделать без классов и глобальных переменных. Вот моя первая функция, которой я хочу похвастаться. В ней не используются шаблоны - чистый список с неограниченым кол-вом вложений.
Эту функцию легко использовать, например этот скрипт возвратит такой результат:
Видим такое: http://img193.imageshack.us/i/111oav.jpg/ Заметьте, что ветки, в которых родитель не нашелся, тоже отображаются, но в конце. И еще, если эти ветки имеют потомков, то они выводятся, как потомки. Вот вторая функция, с использованием шаблонов. Весь интерес в том, что шаблон можно настраивать вплоть до отдельного элемента списка. Или-же используется стандартный шаблон для формирования списка-дерева.
А вот пример использования:
Результат выполнения: http://img199.imageshack.us/i/111ncb.jpg/ Здесь в шаблонах можно указывать дополнительные переменные: - {li_number} текущий номер элемента, начиная считать с первого; - {childrens} количество потомков в текущего элемента; - {lvl} уровень вложенности текущего элемента списка. $z['2']['li'] ... - 'li' - указываем шаблон для 2-го элемента списка, который не имеет потомков; - 'li_' - указываем шаблон для 2-го элемента списка, который имеет потомков. Если шаблон не указать, то используется предыдущий шаблон; $z['default'] - здесь храним стандартный шаблон. Вот так вот. Хочу узнать свой уровень программирования по 100 бальной шкале ![]() ... Подправил, была проблема с $childrens в неопределенных(нижних) элементах(смотрите 2-ю картинку "потомков: 2). |
Автор: bars80080 14.6.2009, 09:35 |
ну да, а в профи как раз такие вопросы обсуждают и дают очки, как на шоу славы работает? не тормозит? делает то что тебе нужно? ну и славненько |
Автор: ksnk 14.6.2009, 11:31 |
Хочется добавить, что в пятницу (и в эту,по инерции), народ еще более-менее активно посещает форум, а субботу-воскресенье - традиционно отдыхает. Ну а по сути, шаблон - это, как правило, отдельная вещь (отдельный файл), которая(ый) в общем случае и пишется даже отдельным человеком. Мне сложно представить как бы я смог объяснить верстальщику, что при верстке именно вот этого участка нужно лезть куда-то в код и писать какие-то странные строчки на php. Можно посмотреть примерный синтаксис какого-нибудь шаблонизатора (Cмарти, к примеру и для контраста http://codeigniter.com/user_guide/libraries/parser.html) и написать шаблон по принятым у верстальщиков правилам. Потом попробовать, как массив влезает в этот шаблон... Это я , собственно, про то, что вторая часть просто лишняя... |
Автор: MoLeX 15.6.2009, 06:04 | ||
Добавлено через 11 секунд перенесено |
Автор: s0lman 11.8.2009, 14:41 |
В общем, мне тут нечто подобное понадобилось, отчего наткнулся в поиске на это творение. Вот только никок не пойму - как у него выполняется рекурсивный подъем? (вторую ф-ю не смотрел) И не могу предположить, как у него получился вывод "Свалка книг" - это код корявый, или у меня руки кривые? ;) |
Автор: s0lman 12.8.2009, 00:04 |
В общем, дома код заработал. Тут же подключился к рабочей машине, коды перекинул - как и раньше: выполняется до момента, когда нужно подниматься на уровень выше, т.е. на http://img193.imageshack.us/i/111oav.jpg/ примере последняя выводимая запись будет 222. У кого есть какие соображения по этому поводу? |
Автор: Ипатьев 12.8.2009, 09:30 |
Не очень понял, зачем автор повторяет много раз про шустрость алгоритма. Вроде бы, разбор небольшого массива никогда не был узким местом, как его не делай. А других достоинств я в коде не вижу. Лично я бы сделал в два этапа. Сначала получил дерево, а потом развернул его в плоский массив. чтобы в массиве было что-то вроде open item item open item close close item close И уже этот массив передавать шаблонизатору. Добавлено @ 09:35 Учитывая, что вся относительная "сложность" алгоритма состоит в необходимости закрывающего тега, то имеет смысл подумать о другом варианте визуализации. Не списками, а, скажем, отступами. Тогда массив получится гораздо проще, и в нем нужно будет указывать только уровень вложенности элемента. |