![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
LittleFuntik |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 8.8.2007 Где: Украина, Чернигов Репутация: нет Всего: нет |
Захотел сам, не смотря ни на какие исходники написать скрипт, формирующий список-дерево. Не пугайтесь кода! Он очень шустрый. Я попытался сделать без классов и глобальных переменных.
Вот моя первая функция, которой я хочу похвастаться. В ней не используются шаблоны - чистый список с неограниченым кол-вом вложений.
Эту функцию легко использовать, например этот скрипт возвратит такой результат:
Видим такое: ![]() Заметьте, что ветки, в которых родитель не нашелся, тоже отображаются, но в конце. И еще, если эти ветки имеют потомков, то они выводятся, как потомки. Вот вторая функция, с использованием шаблонов. Весь интерес в том, что шаблон можно настраивать вплоть до отдельного элемента списка. Или-же используется стандартный шаблон для формирования списка-дерева.
А вот пример использования:
Результат выполнения: ![]() Здесь в шаблонах можно указывать дополнительные переменные: - {li_number} текущий номер элемента, начиная считать с первого; - {childrens} количество потомков в текущего элемента; - {lvl} уровень вложенности текущего элемента списка. $z['2']['li'] ... - 'li' - указываем шаблон для 2-го элемента списка, который не имеет потомков; - 'li_' - указываем шаблон для 2-го элемента списка, который имеет потомков. Если шаблон не указать, то используется предыдущий шаблон; $z['default'] - здесь храним стандартный шаблон. Вот так вот. Хочу узнать свой уровень программирования по 100 бальной шкале ![]() ... Подправил, была проблема с $childrens в неопределенных(нижних) элементах(смотрите 2-ю картинку "потомков: 2). Это сообщение отредактировал(а) LittleFuntik - 13.6.2009, 17:53 |
||||||||
|
|||||||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
ну да, а в профи как раз такие вопросы обсуждают и дают очки, как на шоу славы
работает? не тормозит? делает то что тебе нужно? ну и славненько |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Хочется добавить, что в пятницу (и в эту,по инерции), народ еще более-менее активно посещает форум, а субботу-воскресенье - традиционно отдыхает.
Ну а по сути, шаблон - это, как правило, отдельная вещь (отдельный файл), которая(ый) в общем случае и пишется даже отдельным человеком. Мне сложно представить как бы я смог объяснить верстальщику, что при верстке именно вот этого участка нужно лезть куда-то в код и писать какие-то странные строчки на php. Можно посмотреть примерный синтаксис какого-нибудь шаблонизатора (Cмарти, к примеру и для контраста шаблонизатор от CI) и написать шаблон по принятым у верстальщиков правилам. Потом попробовать, как массив влезает в этот шаблон... Это я , собственно, про то, что вторая часть просто лишняя... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
Добавлено через 11 секунд перенесено -------------------- Amazing ![]() |
|||
|
||||
s0lman |
|
|||
![]() Белый и лохматый ![]() ![]() Профиль Группа: Участник Сообщений: 637 Регистрация: 1.11.2007 Где: Ukraine Репутация: 9 Всего: 29 |
В общем, мне тут нечто подобное понадобилось, отчего наткнулся в поиске на это творение.
Вот только никок не пойму - как у него выполняется рекурсивный подъем? (вторую ф-ю не смотрел) И не могу предположить, как у него получился вывод "Свалка книг" - это код корявый, или у меня руки кривые? ;) -------------------- Когда я уже выучусь на волшебника? :( |
|||
|
||||
s0lman |
|
|||
![]() Белый и лохматый ![]() ![]() Профиль Группа: Участник Сообщений: 637 Регистрация: 1.11.2007 Где: Ukraine Репутация: 9 Всего: 29 |
В общем, дома код заработал. Тут же подключился к рабочей машине, коды перекинул - как и раньше: выполняется до момента, когда нужно подниматься на уровень выше, т.е. на этом примере последняя выводимая запись будет 222.
У кого есть какие соображения по этому поводу? -------------------- Когда я уже выучусь на волшебника? :( |
|||
|
||||
SneG0K |
|
||||||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 7 Всего: 54 |
LittleFuntik, а как по мне, так круче будет брать код из XML
А круче этого только яйца. Добавлено через 1 минуту и 51 секунду
Садись! два балла ^_^ |
||||||
|
|||||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Не очень понял, зачем автор повторяет много раз про шустрость алгоритма. Вроде бы, разбор небольшого массива никогда не был узким местом, как его не делай.
А других достоинств я в коде не вижу. Лично я бы сделал в два этапа. Сначала получил дерево, а потом развернул его в плоский массив. чтобы в массиве было что-то вроде open item item open item close close item close И уже этот массив передавать шаблонизатору. Добавлено @ 09:35 Учитывая, что вся относительная "сложность" алгоритма состоит в необходимости закрывающего тега, то имеет смысл подумать о другом варианте визуализации. Не списками, а, скажем, отступами. Тогда массив получится гораздо проще, и в нем нужно будет указывать только уровень вложенности элемента. Это сообщение отредактировал(а) Ипатьев - 12.8.2009, 09:35 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |