построение дерева по шаблону!

Safary

Новичок
построение дерева по шаблону!

Вот начал писать функцию построения дерева по шаблону.
Тут я пощу сильно, очень сильно урезанный вариант..

PHP:
function three($tpl,$pid=1){

$q="SELECT name FROM programs WHERE pid=".$pid;
$q=mysql_query($q);
if($q){
while($ar=mysql_fetch_array($q)){
$wawa=str_replace('$name$',$ar['name'],$tpl);
echo $wawa;
}
$pid++;
three($tpl,$pid);
}
}
вызов функции такой -
PHP:
three($three_tpl)
тоесть шаблон может быть любым... к примеру шаблон пусть такой:
PHP:
$three_tpl='<table width="228" border="0" cellpadding="0" cellspacing="3">
  <tr>
    <td width="12" bgcolor="#009999">&nbsp;</td>
    <td width="190" bgcolor="#009999">&nbsp;</td>
    <td width="14" bgcolor="#009999">&nbsp;</td>
  </tr>
  <tr>
    <td bgcolor="#009999">&nbsp;</td>
    <td bgcolor="#CCCCCC"><div align="center">$name$</div></td>
    <td bgcolor="#009999">&nbsp;</td>
  </tr>
  <tr>
    <td bgcolor="#009999">&nbsp;</td>
    <td bgcolor="#009999">&nbsp;</td>
    <td bgcolor="#009999">&nbsp;</td>
  </tr>
</table>'
К примеру таблица у меня такая:
==============================================
ID | PID | NAME
==============================================
1 | 0 | PROGRAMS
2 | 1 | photoshop
3 | 1 | 3ds max
4 | 1 | paint

По идее функция должна вывести строки photoshop, 3ds max, paint через шаблон.
Но выводит тока photoshop, photoshop, photoshop

Почему? Ведь str_replace меняет всё в цикле и сразу сохраняет в другую переменную результат! а если просто написать echo($ar['name']) то всё нормально выведет.
 

Safary

Новичок
И ещё мне интересно... как вы делаете деревья? я делаю по шаблону - так удобно менять дизайн... ну я просто хочу сделать каталог программ. чтоб сначала выводилось из базы где pid(parent id)=1 по шаблону по структуре:
$ar['name']; $ar['img'];

а выводилась такая вещь:

архиваторы
графика
защита

А потом при нажатии на графика(к примеру) выводилось по шаблону из базы то, где pid=3 (ID раздела "графика"):

photoshop
corel draw
paint =)
illustrator
3ds max

-~{}~ 10.02.09 23:58:

cDLEON и причем тут инкриминты и дикриминты?
 

cDLEON

Онанист РНРСlub
http://phpclub.ru/detail/article/2002-06-03
http://phpclub.ru/detail/article/db_tree
 

cDLEON

Онанист РНРСlub
Если сам месагу правил, значит зачем то нужны были?
Там, кстати, ещё были ПРЕ-инкременты. Но на них ты внимания не обратил.
PS. Люди, а есть где-нибудь мануал по тому, что бы научить новичков ставить отступы в своих программах ?
 

x-yuri

Новичок
Safary во-первых mysql_num_rows
во-вторых зачем $pid++
в-третьих, ты уверен, что от урезания кода его функциональность не изменилась?
 

Safary

Новичок
x-yuri, да вроде нет. Мне главное узнать - почему
PHP:
str_replace()
в коде не работает, у меня всё через него, сайт строится по шаблонам, вообще без echo... без него никак...

cDLEON, ну да я поправил, сорри...
как понять отступы в программах? табуляция чтоли?

Сейчас изучаю урок который вы дали(http://phpclub.ru/detail/article/2002-06-03), как строить дерево я понял, а вот автоматом создать из такой таблицы:
---------
id parent
---------
3 0
5 0
7 0
10 3
11 7
12 5
13 3
16 10
21 16
26 11
30 3
47 7
60 10
73 13
75 47
---------

вот такую:

------------------------------
id sort parent sortorder level
------------------------------
3 1 0 01 0
10 4 3 0104 1
16 8 10 010408 2
21 9 16 01040809 3
60 13 10 010413 2
13 7 3 0107 1
73 14 13 010714 2
30 11 3 0111 1
5 2 0 02 0
12 6 5 0206 1
7 3 0 03 0
11 5 7 0305 1
26 10 11 030510 2
47 12 7 0312 1
75 15 47 031215 2
------------------------------

я так и не понял. тот код кучу ошибок выдает...
Ещё я не пойму поля softorder - для чего оно нужно?
Как я понял - чтобы каждый раз родителей не вычислять, а вычислить один раз и потом уже строить всё, но цифры - то там не родители по порядку, вот если бы так было - то я так бы сделал:

в родителе "programs"(ID 1, PID 0) лежит graphics.
в родителе "graphics"(ID 2, PID 1) лежат дети "3dsmax"(ID 3, PID 2), photoshop(ID 4, PID 2)

значит softorder(это же адресс по родителям?) поля photoshop должен быть 120, тоесть родители - ID 1, ID 2, ID 0

Я совсем запутался, плз помогите!

-~{}~ 11.02.09 23:33:

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

-~{}~ 11.02.09 23:42:

а догадался теперь что из поля sort строится - но зачем нужно поле sort?
 

cDLEON

Онанист РНРСlub
как понять отступы в программах? табуляция чтоли?
Именно.
Ещё я не пойму поля softorder - для чего оно нужно?
Помоему название говорит само за себя - поле, по которому нужно делать сортировку.
Там, вроде, даже написано об этом. Где то в середине статьи!
Прекрати читать мануалы по диагонали! Если хочешь разобраться, конечно.
Цифры там, скорее всего, от балды.
 

Safary

Новичок
Всё понял, теперь не пойму для чего поле Sort - если есть ID =) сортировка по sortorder делается =)

-~{}~ 12.02.09 14:38:

Точнее не ID а PARENT? зачем лишняя строка - Sort?
ну типа зачем sortorder из поля sort составлять, если можно из Parent?
 
Сверху