Struktura bazy danych wygląda tak:
id (INT) super (INT) label (VARCHAR)
przy czym kategorie nadrzędne mają id = 0.
Funkcja generuje listę <ul><li></li></ul>:
<?php function menu () { // POBRANIE IDENTYFIKATORA KATEGORII NADRZEDNEJ $query = "SELECT super FROM categories WHERE id = " . $_GET['cat']; $super = $row['super']; } // POBRANIE WSZYSTKICH NADRZEDNYCH KATEGORII $query = 'SELECT id, super, label FROM categories WHERE super = 0 ORDER BY label ASC'; // UTWORZENIE LISTY KATEGORII NADRZEDNYCH $output = '<ul>'; // WYSWIETLENIE PODKATEGORII if ( ( isset( $_GET['cat'] ) ) && ( is_numeric( $_GET['cat'] ) ) && ( ( $row['id'] == $_GET['cat'] ) || ( $row['id'] == $super ) ) ) { $output .= '<li><a href="?cat=' . $row['id'] . '" class="redb">' . $row['label'] . '</a>'; $query2 = "SELECT COUNT(id) FROM categories WHERE super = " . $row['id']; if ( $count[0] > 0 ) { $query2 = 'SELECT id, super, label FROM categories WHERE super = ' . $row['id'] . ' ORDER BY label ASC'; $output .= '<ul>'; $output .= '<li><a href="?cat=' . $row2['id'] . '" class="red">' . $row2['label'] . '</a></li>'; $output .= '</ul>'; } $output .= '</li>'; } else $output .= '<li><a href="?cat=' . $row['id'] . '">' . $row['label'] . '</a></li>'; } $output .= '</ul>'; return $output; } ?>
Aktualnie wybrana kategoria jest przekazywana poprzez
.
<?php $_GET['cat'] ?>
Macie jakieś pomysły na optymalizację lub zabezpieczenie tej funkcji?
W przypadku wyświetlanie podkategorii myślałem o rekurencji, ale odstąpiłem od tego pomysłu z tego względu, że dla potrzeb dwupoziomowego menu tak jest chyba prościej.