Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wielopoziomowe subkategorie/submenu
Forum PHP.pl > Forum > PHP
zlw
Witam,

Mam pewien problem z napisaniem skryptu subkategorii.
Kod który napisałem obsługuje na razie tylko jedną subkategorię:
  1. <?php
  2. $sql = "SELECT name, id
  3. FROM coruscant_test
  4. WHERE up = ''";
  5. $sql = mysql_query($sql);
  6.  
  7. while($row = mysql_fetch_array($sql))
  8.  {
  9.  echo "$row[name]<br>";
  10. $sql = "SELECT name, id
  11. FROM coruscant_test
  12. WHERE up = $row[id]";
  13. $sql = mysql_query($sql);
  14. while($zyt = mysql_fetch_array($sql))
  15.  {
  16.  echo " $zyt[name]<br>";
  17.  }
  18.  }
  19. ?>


Chciałbym żeby ktoś pomógł przekształcić go tak, żeby obsługiwał wiele poziomów kategorii.
Może podam jeszcze strukturę bazy:
  1. name | up | id
  2. co1 1
  3. co2 1 2
  4. co3 1 3
  5. co4 2 4


Pole up zawiera numer 'id' kategorii 'wyżej'.
em1X
zmien trochę strukturę bazy:

tabela category:
- cat_id
- name

tabela categories
- cat_id (category.cat_id)
- subcat_of (category.cat_id)

Dzięki takiemu czemuś możesz mieć nieskończoną ilość subkategorii. Ale współczuję Ci to programować biggrin.gif katorga, męka dla Ciebie jak i dla bazy danych.. ta ciągła rekurencja..
nexis
Ja proponuję jedną tabelke o takiej strukturze:

  1. ++++++++++++++++++++++
  2. + id + super + label +
  3. ++++++++++++++++++++++
  4. + 1 + 0 + Jeden +
  5. + 2 + 0 + Dwa +
  6. + 3 + 1 + A +
  7. + 4 + 1 + B +
  8. + 5 + 1 + C +
  9. + 6 + 2 + D +
  10. + 7 + 2 + E +
  11. + 8 + 2 + F +
  12. ++++++++++++++++++++++


A następnie menu wyświetlasz korzystając z funkcji rekurencyjnej:

  1. <?php
  2. function menu ($super = 0) {
  3. $query = 'SELECT id, label FROM table WHERE super = ' . $super . ' ORDER BY label ASC';
  4. $query = mysql_query( $query );
  5. $output = '<ul>';
  6. while ( $row = mysql_fetch_array( $query ) ) {
  7. $output .= '<li>' . $row['label'];
  8. $query2 = 'SELECT COUNT(id) FROM table WHERE super = ' . $row['id'];
  9. $query2 = mysql_query($query2);
  10. $count = mysql_fetch_array($query2);
  11. if ($count[0] > 0) $output .= menu($row['id']);
  12. $output .= '</li>';
  13. }
  14. $output .= '</ul>'; 
  15. return $output;
  16. }
  17. ?>
em1X
a jeżeli jedna kategoria będzie subkategorią dwóch innych jednocześnie nexis ?
cicik
Ja proponuję zapoznać się z algorytmem nested tree. Dość skuteczna sprawa.
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.