Красивый вывод дерева (Nested sets).

off

Новичок
Вот это другое дело!!! УРА! :)

Блин, опят проблема. Чего-то не правильно выводиться.

Глянь , что получается


-~{}~ 18.09.05 14:26:

Такую тему я делал и без массивов. Но ведь нужно убрать все лишние палочки...
 

off

Новичок
Слушай, у меня не хватает мозгов. Как раз над етим-то я и мучался. Помоги плиз...

-~{}~ 18.09.05 16:05:

Пожалуйста Пожалуйста Пожалуйста Пожалуйста Пожалуйста :)
 

Popoff

popoff.donetsk.ua
тот, кто говорит "помоги, пожалуйста", подразумевает "сделай это за меня, пожалуйста" :) ничего плохого в этом нет, только не совсем понятно, зачем говорить "помоги", когда на самом деле требуется "сделай это за меня" :)

вот тут еще примеры:
http://phpclub.ru/faq/Tree
 

off

Новичок
Ок, тогда "сделай это за меня, пожалуйста" :) Чесно, мучаюсь с этим уже долго. И читал вот это http://phpclub.ru/faq/Tree
тоже. Но может кон-нибудь, хоть приведет код. ПЛИЗ!!!!!!!!!!!!

-~{}~ 18.09.05 16:35:

Popoff, ты, как я понял писал вот это http://popoff.donetsk.ua/try/tree_dynamic/tree_print_dynamic.html?

Как в моем случаие сформировать массив, и как сделать, чтобы при отображении дерева оно сразу же отображалось открытым, а не закрытым.
 

Popoff

popoff.donetsk.ua
off
Ок, тогда "сделай это за меня, пожалуйста"
А такая просьба, как известно, означает, что ты нанимаешь на работу человека, который сделает эту работу за тебя. А работа, как известно, оплачивается :) Собственно, вот он ответ на мой вопрос "зачем говорят одно вместо другого" - чтобы не платить деньги :)
Но может кон-нибудь, хоть приведет код
разве там не достаточно примеров кода?
Как в моем случаие сформировать массив, и как сделать, чтобы при отображении дерева оно сразу же отображалось открытым, а не закрытым.
А подумать? :)
 

off

Новичок
Наверное я подумал, перд тем как спросисть :)

Ответ на мой вопрос я думаю уже будет "помощью" :)

-~{}~ 18.09.05 17:30:

а не "сделай это за меня, пожалуйста".

-~{}~ 19.09.05 02:09:

УРАА! Огромное спасибо всем! Потратил на это целый день, но все таки сделал. Конечно через ж#пу, по своему, но зато работает. СПАСИБО еще раз! :)

-~{}~ 19.09.05 02:13:

Нашел выход тем, что создал еще одну колонку num в бд, куда заносил картинки, стоящие перед названием родительского элемента.

Подскажите, как может можно сделать проще?

PHP:
///////Выводим главный елемент//////////////
$sql="SELECT * FROM c_tree WHERE level=0"; 
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$name = $row ['name'];
$id = $row ['id'];
echo "<a href=?mod=$mod&action=add_cat&id=$id>".$name.'</a><br>';
//////////////////////////////////////
$sql="SELECT * FROM c_tree ORDER BY left_key"; 
$result=mysql_query($sql);
while ($row=mysql_fetch_array($result)){
	$left_key = $row ['left_key'];
	$right_key = $row ['right_key'];
	$level = $row ['level'];
	$name = $row ['name'];
	$parent_id = $row ['parent_id'];
	$id = $row ['id'];

	if ($level<>0){	
	//////////////////////Инфа о родителе///////////////////////
	$sql_par = "SELECT * FROM c_tree WHERE id=$parent_id";
	$res_par = mysql_query($sql_par);
	$row_par = mysql_fetch_array($res_par);
	$p_left_key = $row_par['left_key'];
	$p_right_key = $row_par['right_key'];
	$p_level = $row_par['level'];
	$p_p_id = $row_par['parent_id'];
	$p_num = $row_par['num'];
	
	/////////////////////////Вставляем в бд заборчик тек. елемента/////////////////////	
	$num ="";
	$sql_par_1 = "SELECT * FROM c_tree WHERE parent_id=$p_p_id and left_key>$p_left_key and right_key>$p_right_key and level=$p_level";
	$res_par_1 = mysql_query($sql_par_1);
	//echo $sql_par_1;
	if (mysql_num_rows($res_par_1)==0)//Если его родитель последний,вставляем пустые картинки
	{
		for ($i=0;$i<$level-1;$i++){
			$num = $p_num."<img src=$MOD_PATH$mod/images/line_0.gif border=0>";	
		}
	}
	else //Если его родитель не последний,вставляем линии картинки
	{
		for ($i=0;$i<$level-1;$i++){
			$num = $p_num."<img src=$MOD_PATH$mod/images/linemiddle.gif border=0>";	
		}
	}
	
	$sql_up = "UPDATE c_tree SET num='$num' WHERE id=$id";
	$res_up = mysql_query($sql_up);
	///////////////////////////////////////////////////////////////////////////////////
	
	
	if ($level<>1){
		
	//////Последний ли родитель?//////////////////////////////////////////////

	$sql_par_1 = "SELECT * FROM c_tree WHERE parent_id=$p_p_id and left_key>$p_left_key and right_key>$p_right_key and level=$p_level";
	$res_par_1 = mysql_query($sql_par_1);
	
	if (mysql_num_rows($res_par_1)==0)
	//Если да, то вставляем заборчик родителя+пустую картинку
		echo "$p_num<img src=$MOD_PATH$mod/images/line_0.gif border=0>";
	//Если нет, то вставляем заборчик родителя+палочку
	else 
		echo "$p_num<img src=$MOD_PATH$mod/images/linemiddle.gif border=0>";
	}
	////////////Выводи маркер/////////////////////////////////////////////////////
	$sql_el="SELECT * FROM c_tree WHERE level=$level and right_key>$right_key and left_key>$left_key and parent_id=$parent_id"; 
	$result_el=mysql_query($sql_el);
	
	if (mysql_num_rows($result_el)==0) {
		echo"<img src=$MOD_PATH$mod/images/joinbottom.gif border=0>";
	}
	
	else 
		echo"<img src=$MOD_PATH$mod/images/joinmiddle.gif border=0>";
	
	////////////////////////////////////////////////////////////////////////	
	echo "<a href=?mod=$mod&action=add_cat&id=$id>".$name.$level.'</a><br>';
 
Сверху