| 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 |
|
| |