Вопрос по концепции

pilot911

Новичок
Вопрос по концепции

Добрый день всем!

Задался реализацией концепции построения многоуровнего меню из таблицы страниц.

Хочется, чтобы пользователь среди прочих вариантов имел возможность указать в настройке меню подобный конфиг перечня id страниц:


2{3,1,4{18,19,20{34},55}},5,6,7{10,12} где цифры в фигурных скобках указывают на следующий уровень меню.


как распарсить такую строчку ?
 

Духовность™

Продвинутый новичок
глупость. когда уровни вложенности будут большие, пользователь с ума сойдет эту белиберду править.

задачу построения древовидного можно решить использованием примитивных деревьев и реализацией нормального интерфейса в админской части.
 

Фанат

oncle terrible
Команда форума
pilot911
я бы на твоем месте сделал, все же, графический интерфейс.
это как-то привычнее, все-таки
 

pilot911

Новичок
графический интерфейс есть



но он жестко зашит, а хочется дать возможность формировать меню при помощи id
 

Crys

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

pilot911

Новичок
сделал реализацию парсинга подобных строчек '2{3,4{7,8}}5,6' - теперь на выходе получаем массив вида:

id страницы | родитель

2 0
3 2
4 2
7 4
8 4
5 0
6 0




PHP:
                $tmp_pages	=	explode(',', '2{3,4{7,8}}5,6');   		 		

                $stack	=	array(0); 		

                $parent	=	0; 		

		foreach	($tmp_pages	as	$k=>$val)	{
 			
			if (strpos($val, '{')!==FALSE)	{
 			
 				$tmp			=	explode('{', $val);
 				
				foreach($tmp	as	$k_=>$val_)	{
					$tree[intval($val_)]	=	$stack[count($stack)-1];

					if (isset($tmp[$k+1]))	{
						array_push($stack, intval($val_));
 						$parent			=	intval($val_);
 					}
				
					if (strpos($val_, '}')!==FALSE)	{
 						$s	=	explode('}', $val);
						$total_s	=	count($s);
						for($i=0;$i<($total_s-1);$i++)
							array_pop($stack);
						$parent			=	isset($stack[$total_s-1]) ? $stack[$total_s-1] : 0;
					}
 				}
			}
			elseif (strpos($val, '}')!==FALSE)	{
				
				$tree[intval($val)]	=	$parent;
				
				$s	=	explode('}', $val);
				$total_s	=	count($s);
				debug($stack);
				for($i=0;$i<($total_s-1);$i++)
					array_pop($stack);
				
				$parent			=	isset($stack[$total_s-1]) ? $stack[$total_s-1] : 0;
				
				if (isset($stack[$total_s-1]))	$tree[$s[$total_s-1]]	=	$parent;
  			}
			else	{
 				$tree[$val]	=	$parent;
			}
 		}


таким образом можно формировать многоуровневое меню из строки через id страниц

имея массив (id страницы | родитель) можем пройтись по массиву из страниц и сформировать меню
 

HraKK

Мудак
Команда форума
pilot911
тупость. Делай деревья. Графические.
 

pilot911

Новичок
уже сделаны, это для нестандартных менюшек, создаваемых из того же дерева
 

HraKK

Мудак
Команда форума
что-то типа такого
http://extjs.com/deploy/dev/examples/tree/reorder.html
 

vovanium

Новичок
pilot911
таким образом можно формировать многоуровневое меню из строки через id страниц
Страдалец, и как ты себе представляешь этот увлекательный процесс создание этих строк из id'шек?
а хочется дать возможность формировать меню при помощи id
Зачем? Юзеру вообще эти id нафиг не нужны, для него названия страниц намного более понятны и удобны...
 
Сверху