Вход

Просмотр полной версии : Логика меню


nOobCrafter
11.05.2009, 20:05
День добрый, может кто нибудь подскажет, есть динамическое меню (генерится список фильмов и выводится пользователю, тот скачивает что надобно), список генерится пхп скриптом, структура такова: ему даются папки, он по ним бегает и если находит фильмы то записывает их, если находится папки то тоже записывает и бегает еще по ним в поисках других фильмов (рекурсия обычная). Степень вложенности теоретически может быть любая (3-4 уровней хотя бы есть). Просто вывести список всего этого добра на экран я могу, но он слишком большой. Что быкак то облагородить это дело решил сделать возможность соврачивать \ разворачивать содержимое этих самых папок, тут и возникла наибольшая проблема — немогу логически понять как это организовать. Будь структура линейная было бы все просто, а как быть с разными уровнями сложности немогу придумать.
То есть цель такова, нажимаем на папку и елементы что ниже нее (на том же уровне) смещаются вниз, нажали еще раз — все вернулось обратно). Непонятно как именно достучать до элементов что находятся на другом уровне вложенности.((
З.Ы. думал все выходные а тут пока писал пришла еще одна мысль, опускаем все елементы что находятся ниже текущего на данном уровне вложенности, потом идем на уровень выше и делаем так же, и так пока не дойдет до рута.
но может кто знает схемы получше?
Исходник под 9тку в аттаче если кому интересно.

Kuruki
11.05.2009, 20:50
Я бы воспользовался компонентом Tree, по идеи его вы и пытаетесь реализовать. К тому же имеется возможность присваивания хмл-данных в качестве дата-провайдера, удобно.

nOobCrafter
11.05.2009, 20:59
Kuruki все упирается в "дизайн", сомневаюсь что с его помощью можно реализовать что мне надо (хотя могу и ошибаться с компонентами дел не имел, но отзывы о них не лестные((), опять же просто интересен алгоритм.
Всеравно спасибо, посмотрю его.

Добавлено через 15 часов 48 минут
К модерам: Можно я тут буду еще вопросы по этому задавать а не создавать отдельные темы?
Вопрос по оптимизации, как лучше сделать перебор елементов в этой иерархии, мне в голову приходят 3 варианта:
1. for .. in, но читал что долго, так тчо скорее что то из двух других.
2. заносим все елементы в один многомерный массив и дальше его перебираем опираясь на уникальные идентификатор обьекта
3. заносим все содержимое папки в его св-во массив и дальше уже работает с этими св-вами.
Как лучше сделать можете подсказать?