Кецаль Коатль (kecal_koatl) wrote in ru_php,
Кецаль Коатль
kecal_koatl
ru_php

Categories:

Меню с бесконечной вложенностью

Товарищи-друзья-коллеги! Помогите пожалуйста, с решением насущной проблемы. Пытаюсь сделать менюшку с бесконечной вложенностью элементов. Родительские ветки не должны захлапываться при открытии ребенка (дочернего элемента). Который день. Мозг скоро взорвется. Код - подкатом, не поленитесь взглянуть.


<?php
/*
menu.dat
560017::kontrol::Контрольная проверка::0
560030::enter-ty::Решение вопроса с Enter::0
560029::enter::Enter - Enter::560030
560038::inexsator::Индексатор закончен::560017
560432::inexsaor::Индекс - 2::560038
560043::as::Контрольная проверка::560017
*/

function get_menu() { 
	foreach(file('menu.dat') as $v) {
		$e = explode('::', trim($v));
		$m[$e[0]] = trim($v);
		$s[$e[1]] = $e[0];
		if($e[1]==$_GET['id']) {
			$sv[] = $e[3];
			$sv[] = $e[0];
		}
	} 
	foreach($m as $k=>$g) {
			$e = explode('::', trim($g));
			if($e[3]==0 || in_array($e[0],$sv) || in_array($e[3],$sv)) {
				$o .= '<li><a href="?id='.$e[1].'">'.$e[2].'</a>';
				unset($m[$k]);
			}
			foreach ($m as $k2=>$g2) {
				$es = explode('::', trim($g2));
				if(in_array($es[3],$sv) && $e[0]==$es[3]) {
					if($s[$_GET['id']]==$es[0]) {
						$sv[] = $es[3];
						$sv[] = $es[0];
					}
					$o .= '<li><a href="?id='.$es[1].'">'.$es[2].'</a>';
					unset($m[$k2]);
				}
			}
	} 
	return $o;
}

echo get_menu();

?>


Знаю-знаю, стращнющий говонокод! Помогите если можете с решением проблемы.

ps. Готов предоставить небольшой материальный бонус за помощь в решении задачи. :j
Subscribe

  • Как правильно писать из php в stderr?

    Я использую на своём веб-сайте Wordpress с plugin'ом "LiveJournal Crossposter Remake", который копировал мои посты в LJ, а потом в DW. Но недавно он…

  • Redis, странное

    Коллеги имеющие Redis в хозяйстве, прошу, проверьте, не имеется ли в Ваших базах следующих данных: 1. Строка 'counter:__rand_int__' значением…

  • (no subject)

    Вот вы сидите тут, и не знаете, что в internals идут жаркие бои вокруг предполагаемого к принятию Морального кодекса строителя коммунизма. Всегда…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 54 comments

  • Как правильно писать из php в stderr?

    Я использую на своём веб-сайте Wordpress с plugin'ом "LiveJournal Crossposter Remake", который копировал мои посты в LJ, а потом в DW. Но недавно он…

  • Redis, странное

    Коллеги имеющие Redis в хозяйстве, прошу, проверьте, не имеется ли в Ваших базах следующих данных: 1. Строка 'counter:__rand_int__' значением…

  • (no subject)

    Вот вы сидите тут, и не знаете, что в internals идут жаркие бои вокруг предполагаемого к принятию Морального кодекса строителя коммунизма. Всегда…