Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Kategorie
Forum PHP.pl > Forum > Przedszkole
bangoo
Ma ktoś z was jakiś pomysł jak zrobic kategorie np. artykułów w bazie danych? Niemam pomysłu na algorytm a może ktoś z was już kiedyś to robił.
Z góry dzięki.
Cienki1980
Jedna tabela w bazie danych o mniej więcej takiej strukturze:
id-auto_increment int
parent_id - int
name - varchar

prosty opis:
id- nie trzeba tłumaczyć biggrin.gif
parent_id - id kategorii nadrzędnej ... dla kategorii głównych jest równe 0
name - nazwa kategorii

Za pomocą takiej tabeli możesz stworzyć drzewiastą strukturę kategorii produktów.
bangoo
Juz myslalem nad tym rozwiązaniem, ale niewiedziałem jak ułożyc tą pętlę. Jeżeli ktoś mógłby pomóc.. rolleyes.gif
Cienki1980
Cytat(bangoo @ 18.03.2007, 16:35:58 ) *
Juz myslalem nad tym rozwiązaniem, ale niewiedziałem jak ułożyc tą pętlę. Jeżeli ktoś mógłby pomóc.. rolleyes.gif

To może sprecyzuj jaką pętlę questionmark.gif
bangoo
Żeby wyświetli taki ciąg: Kategoria główna -> Kategoria babcia -> Kategoria matka -> Kategoria A
mając dwie tabele (id, id_parent). Będę musiał utworzyc jakąś pętlę, którap o sprawdzeniu rodzica Kategori A sprawdzi rodzica Kategori matka, a nastepnie rodzica kategorii matka i jezeli rodzic Kategori babcia == 0 to oznacza ze to kategoria główna.
Cienki1980
  1. <?php
  2. $g=0;
  3. $tmp_id=30; // to jest id aktualnego regionu 
  4. do
  5. {
  6.  $pyt1=mysql_query("select id,id_region,name from region where id='".$tmp_id."'");
  7.  $ile1=mysql_num_rows($pyt1);
  8.  if($ile1>0)
  9.  {
  10. $ans1=mysql_fetch_array($pyt1);
  11. $tab[$g]['id']=$ans1['id'];
  12. $tab[$g]['name']=$ans1['name'];
  13. $tmp_id=$ans1['id_region'];
  14. $g++;
  15.  }
  16.  else
  17. $tmp_id=0;
  18. }
  19. while($tmp_id!=0);
  20.  
  21. echo"<pre>";print_r($tab);echo "</pre>";
  22. ?>

Tu masz przykład z jakiegoś dawnego mojego skryptu, tutaj były odczytywane regiony.

Podając $tmp_id jako id regionu do sprawdzenia w tablicy $tab była cała ścieżka regionów do regionu głównego ( w moim przypadku był tylko jeden taki WORLD )
bangoo
Dobra, mam już to w tablicy, a jak to wyświetlic? (nigdy sie niebawiłem tablicami ;/)
Cytat
Array
(
[0] => Array
(
[id] => 2
[title] => mniejglown
)

[1] => Array
(
[id] => 1
[title] => glowna
)

)
misiek172
można równierz do pomocy zobaczyć klase nospor'a "tree (drzewo folderów)".
Cienki1980
Cytat(bangoo @ 18.03.2007, 17:45:52 ) *
Dobra, mam już to w tablicy, a jak to wyświetlic? (nigdy sie niebawiłem tablicami ;/)


Zaglądamy do manuala i sprawdzamy co robi array_reverse()
bangoo
Jak to wyswietli w taki sposób? - glowny>babcia>matka
Cienki1980
Cytat(bangoo @ 18.03.2007, 18:07:10 ) *
Jak to wyswietli w taki sposób? - glowny>babcia>matka

Odwróć tablicę za pomocą array_reverse() ... a potem zastosuj pętlę foreach() i odpowiednio sobie to wyświetl .
bangoo
Ja już to zrobiłem za pomocą do..while ale nie działa do końca
  1. <?php
  2. do
  3. {
  4.  echo $tab[$d]['title'] . ">";
  5. $d++;
  6. }
  7. while($d == $x);
  8. ?>

Tutaj $x to to samo co u Ciebie w skrypcie $g

wynik:
Cytat
do
{
echo $tab[$d]['title'] . ">";
$d++;
}
while($d == $x);
Cienki1980
  1. <?php
  2. foreach($tab as $k=>$v)
  3. {
  4.  echo $v['title'].">";
  5. }
  6. ?>


Pisane na szybko i będzie feler bo na końcu będzie znak > ale to już najmniejszy problem.
bangoo
No i to by było chyba na tyle. smile.gif
Wielkie dzięki Cienki smile.gif
Można zamknąc/usunąc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.