Алгоритм вывода меню

  • Автор темы Crazy_AG
  • Дата начала

Crazy_AG

Guest
Алгоритм вывода меню

Всем привет!
Очень большая просьба подсобить в разработке алгоритма вывода меню (сам уже голову поломал - очень нужно)....
Значит задача в следующем:
1. Есть файл, примерно такой структуры:
.пункт 1|путь к скрипту 1
..пункт 1_1|путь
..пункт 1_2|путь
...пункт 1_2_1
...пункт 1_2_2
..пункт 1_3

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

2. Файл при помощи скрипта на ПХП разбираю в файл в массив.

3. Собственно задача:
Необходимо вывести меню на основе вложенных <DIV>
т.е. чтобы выглядело вот так:
<a>пункт 1</a><br>
<div id="div1_1" style="display: none;">
<a>пункт 1_1</a><br>
</div>
<div id="div1_2" style="display: none;">
<a>пункт 1_2</a><br>
<div id="div1_2_1">
<a>пункт 1_2_1</a><br>
<a>пункт 1_2_2</a><br>
</div>
</div>
<div id="div1_3" style="display: none;">
<a>пункт 1_3</a><br>
</div>

Голову сломал - уже второй день не могу толкового ничего сделать - чувствую без рекурсии не обойтись - только как ??????? Помогите пожалуйста - знающие люди...
 

Crazy_AG

Guest
Demiurg
Извиняюсь (торопился) - уже поправил
 

Demiurg

Guest
а почему внутри
<div id="div1_2_1">
и пункт 1_2_1 и пункт 1_2_2 ?
 

Crazy_AG

Guest
Demiurg
потому что они являются пунктами одного уровня и вместе вложены в вышеописанный слой...
 

Demiurg

Guest
но div1_1 и div1_2 тоже являются пунктами одного уровня.
 

Crazy_AG

Guest
Demiurg
Да, но в данном случае пункт 1_2_1 и пункт 1_2_2 - являются конечными пунктами(и они уже не включают в себя вложенных слоев)
 

netklon

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

che

Guest
Инициализация массива
PHP:
<?php   
  $index = array ( '?????????' => array ('?????' => 6, '??????????' => 9 , '??????' => 4), '????? ????????????????' => array ('perl' => 7, 'php' => 4, 'c/c++' => 14, 'javaScript' => 6), '?????????' => array ('rfc'=> 2074 , 'iana' => '71')); 
 $h = fopen('./cache/index.swp', 'w');  
fwrite($h,serialize($index));  
fclose ($h);  
?>
Вывод меню
PHP:
<html>  
<head>  
<title>example</title> 
 <script language='JavaScript'>
  function treeExpand(name) 
{  	tr = document.getElementById(name); 
 	tr.style.display	= (tr.style.display == '' ? 'none' : '');  	return true;  }  
  </script>
  </head>  
<body bgcolor='gray'>  
<?php  
$index=unserialize(file_get_contents('./cache/index.swp'));  
echo index($index, '', 0, '');    
function  index($arr, $path, $i, $visible)	{  	
$c=0;  	
$content='<ul id="'.$i.'" style="display: '.$visible.'">';
  	foreach  ($arr as $key => $value) {
  		$content.= is_array($value) ?  
'<li onclick="treeExpand(\''.$i.'_'.$c.'\')";  ><a href="#" >'.$key.'</a></li>'.index($value, $path.'/'.$key, $i.'_'.$c++,'none') 
: '<li onmouseover="this.style.color=\'activeborder\'"; onmouseout="this.style.color=\'black\'";><a href="http://host.ru/lib/part.php?path='.md5($path.'/'.$key).'" >'.$key.'</a>['.$value.']</li>';  	
}
  	return $content.'</ul>';  
}    
?>  
</body> 
 </html>
Разбирайся. Принцип поймешь.
 
Сверху