Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

ajutor script
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Subiectul anterior :: Subiectul următor  
Autor Mesaj
andreibrr



Data înscrierii: 02/Oct/2004
Mesaje: 120

Trimis: Sâm Oct 02, 2004 6:45 pm    Titlul subiectului: ajutor script  

am urm tabela

id int(10)
name varchar(100)
parent_id int(10)

incerc sa creez un script care sa-mi afiseze ierarhizat ceea ce se gaseste in tabela respectiva, pe nivelele existente. Eu retin in tabela doar parintele fiecaruia nu si nivelul pe care se afla

ex rezultat

1 cc1
- 2 cc2
-- 3 cc4
-- 3 cc5
- 2 cc6
1 cc9

functia mea:

Cod:
function rep($ctg,$v) {

                if(!$ctg) { $ctg="0"; }
                $res  = mysql_query("SELECT * FROM tabela WHERE parent_id='$ctg'") or die("Eroare");

                $p[] = $r[parent_id];
                if(!$v) $v="-";
                $level=1;
                while ($r = mysql_fetch_array($res)) {
                        print "<font color=red>".$v."</font>";
                        print "<b>".$r[parent_id]."</b>/".$r[categ_id]."<br>";
                        $ctg1 = $r[categ_id];
                        $pp = $r[parent_id];

                        if($ctg1==$pp) $v .= "-";

                        rep($ctg1,$pp);

                }
}

rep("0","-");


multumesc
Sus  
mihnea sim



Data înscrierii: 20/Aug/2004
Mesaje: 149
Locație: Alexandria

Trimis: Sâm Oct 02, 2004 7:57 pm    Titlul subiectului:  

Bravo! si care e problema? Presupun ca nu merge .. Ideea pe care ai avut-o si tu e sa folosesti recursiunea .. nici nu se putea altfel cred.
Incearca si asa:

Cod:
$sql = mysql_query("select * from tabel order by parent_id asc ");
while($r = mysql_fetch_array($sql))
{
for ($i=0;$i<=$r['parent_id'];$i++){
 $sql2 = mysql_query("select * from tabel where parent_id=".$i);
 rep($i,"-"); }
}


Ideea e sa incerci ca pt fiecare element de nivel n, sa afisezi inaintea lui nivelele de la 1 la n-1 .. ca sa iti iasa frumos ramificarea. Acuma nu sunt la mine acasa, ca m-as chinui mai mult la script si daca imi va iesi il voi posta.. dar fii te rog un pic mai explicit cum o sa arate ramificarea
Sus  
andreibrr



Data înscrierii: 02/Oct/2004
Mesaje: 120

Trimis: Dum Oct 03, 2004 2:11 pm    Titlul subiectului:  

as vrea sa arate ca un arbore intercaland spatii din ce in ce mai multe acolo unde apare un subnod al unui nod. Face listarea dar nu insereaza spatii cum trebuie in sensul ca nu revine cu patii mai putine cand ajung intr-un nod principal.
Sus  
mihnea sim



Data înscrierii: 20/Aug/2004
Mesaje: 149
Locație: Alexandria

Trimis: Dum Oct 03, 2004 6:59 pm    Titlul subiectului:  

Uf, nu e chiar asa usor cum credeam, ia ceva timp si nu prea am zilele astea timp sa ma gandesc.. daca ai rabdare pana vineri o sa incerc si eu ceva. Ideea e ca $v trebuie si sa se "micsoreze". Adica stochezi intr-o variabila $last_id ultima valoare a nivelului si faci o diferenta ($last_id - $curent_id) si daca iti da pozitiv atunci $v = substr($v,0,$last_id - $curent_id - 1); else if($ctg1 == $pp) $v .= "-";
Succes!
Sus  
andreibrr



Data înscrierii: 02/Oct/2004
Mesaje: 120

Trimis: Dum Oct 03, 2004 11:30 pm    Titlul subiectului:  

Ar fi fost destul de simplu dar daca nivelul urmatator ar urma unul cu doua sau trei trepte mai sus ? Ar fi o solutie sa stochez totul intr-un array ?
Sus  
arond



Data înscrierii: 11/Mar/2004
Mesaje: 580
Locație: 127.0.0.1

Trimis: Lun Oct 04, 2004 1:50 am    Titlul subiectului:  

Mi-e lene sa ma uit si sa curat functia ta, dar solutia e simpla:

an style="color: #000000"><?php function display($id, $level=0) {   // aici obtii inregistrarile pentru parent_id = $id   $records = ...;   foreach ($records as $record)   {      // afiseaza record-ul, prefixat de '-' de $level ori      echo str_repeat('-', $level);      echo $record['xxx']; // bla-bla      echo '<br/>';      // cheia e $level+1      display($record['id'], $level+1);   } } 
Numa' bune.
Sus  
andreibrr



Data înscrierii: 02/Oct/2004
Mesaje: 120

Trimis: Mie Oct 06, 2004 12:33 pm    Titlul subiectului:  

multumesc pt ajutor
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community