Δημιουργία πολυεπίπεδων menu πλοήγησης

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από korgr » 12 Νοέμ 2008 13:05

Η αναζήτηση μου για σχετικό θέμα δεν βρήκε τίποτα εδώ στο fs αλλά έτσι κι αλλιώς ένα βοήθημα παραπάνω ποτέ δεν έβλαψε :wink:

ΤΟ ΠΡΟΒΛΗΜΑ
Η δημιουργία ενός menu πχ προϊόντων, όπου δεν προκαθορίζεται εξ αρχής η δομή και το βάθος των επιπέδων. Παράδειγμα:

Κώδικας: Επιλογή όλων

ΗΛΕΚΤΡΙΚΑ ΕΙΔΗ
      ΨΥΓΕΙΑ
      ΤΗΛΕΟΡΑΣΕΙΣ
      ΗΛ. ΣΚΟΥΠΕΣ
ΗΧΟΣ & ΕΙΚΟΝΑ
      HOME CINEMA
      ΣΤΕΡΕΟΦΩΝΙΚΑ
            ΕΝΙΣΧΥΤΕΣ
            ΗΧΕΙΑ
ΜΙΚΡΟΣΥΣΚΕΥΕΣ
      ΚΑΦΕΤΙΕΡΕΣ
Παρατηρούμε πως η επιλογή "ΣΤΕΡΕΟΦΩΝΙΚΑ" σπάει τον κανόνα και αποφασίζει να έχει νέο submenu (και εκεί μέσα θα μπορούσε κάποια επιλογή πχ "ΗΧΕΙΑ" να έχει κι άλλο submenu κλπ
Αντιλαμβάνεστε εύκολα πως αντιμετώπιση του τύπου: πίνακας section που σχετίζεται με πίνακα categories και που με τη σειρά του σχετίζεται με πίνακα subcategories κλπ μας εγλωβίζει σε σταθερή δομή και μας οδηγεί σε αδιέξοδο!

Η ΛΥΣΗ
Storing Hierarchical Data in a Database
και συγκεκριμένα με την μέθοδο "The Adjacency List Model" που αναλύει ο Gijs Van Tulder στο http://www.sitepoint.com/print/hierarch ... -database/

Όποιος επιθυμεί να εμβαθύνει στην μέθοδο ας επισκεφτεί το ανωτέρω link και ας μελετήσει την function display_children($parent, $level) που στηρίζεται σε recursive calls (η function καλεί τον εαυτό της όσες φορές χρειαστεί).

Εγώ θέλω να αναπτύξω τις μεθόδους παρουσίασης τέτοιων menus εστιάζοντας στα προτερήματα και τα μειονεκτήματα της κάθε μιας.

Πριν περάσουμε στην ανάλυση, έχω ετοιμάσει ένα λειτουργικό demo στο http://www.webpage.gr/test/multilevel_categories/ ώστε και δοκιμές να μπορείτε να κάνετε αλλά και να κατανοήσετε τις 3 μεθόδους που αναφέρω ως:
  • 1. Εμφάνιση δενδροειδής
    2. Εμφάνιση με κάθετη ανάπτυξη
    3. Ευέλικτος τρόπος εμφάνισης
Όλοι οι τρόποι στηρίζονται στην ίδια mysql και στο "The Adjacency List Model"
Μακάρι φυσικά να προτείνετε και άλλους τρόπους!

1. Εμφάνιση δενδροειδής
Πλεονέκτηματα: κατανοητή απεικόνιση των διαδρομών που καταλήγουν σε links, οικεία αίσθηση που έχουν συνηθίσει οι χρήστες Η/Υ στην διαχείριση των αρχείων τους, ιδανικός τρόπος απεικόνισης sitemap
Μειονεκτήματα: Αν περιοριστεί σε κάποια στήλη του layout έχει απροσδόκητα αποτελέσματα αν αυξηθούν πολύ τα levels των ένθετων επιλογών

2. Εμφάνιση με κάθετη ανάπτυξη
Πλεονέκτηματα: ιδανικό για επιλογές που δεν αναπτύσσονται πολύ σε βάθος, προσαρμοστικότητα σε σταθερού πλάτους layouts
Μειονεκτήματα: αν αυξηθούν κάποια στιγμή τα levels, "χάνεται η μπάλα" σχετικά με την διαδρομή (path) στο που ανήκει τι...

3. Ευέλικτος τρόπος εμφάνισης
Πλεονέκτηματα: Οι αρχικές επιλογές προσαρμόζονται σε στήλη σταθερού πλάτους, ενώ τα αναπτυσόμενα levels επικαλύπτουν το όποιο layout μας, κρατώντας ορατό το path μιας συγκεκριμένης επιλογής
Μειονεκτήματα: πλοήγηση με mouseover που δεν βολεύει όλους τους χρήστες, πολυφορεμένος τρόπος navigation

Για τα δικά μου κριτήρια η καλύτερη μέθοδος είναι η τρίτη και είναι αυτή που επέλεξα να σας παρουσιάσω αναλυτικά.

Κατ' αρχάς επέλεξα το All Levels Navigational Menu (v1.5) από το Dynamic Drive ως JS core για την λειτουργία της απεικόνισης του menu, αλλά είναι εφικτό να προσαρμόσετε στην μέθοδό μου οποιοδήποτε άλλο JS menu σας βολεύει.
Για documentation του συγκεκριμένου menu επισκεφτείτε τον ανωτέρω σύνδεσμο.

Στην MySQL επέλεξα να χρησιμοποιήσω δύο πίνακες (αν και μπορεί να γίνει δουλειά και με έναν). Ο πρώτος "categories" έχει id και title κατηγορίας και ο δεύτερος "cat_tree" κρατάει τις γονικές σχέσεις με δύο πεδία (id κατηορίας και parent id κατηγορίας).

Δημιουργούμε ένα menu καλώντας την php function με:

Κώδικας: Επιλογή όλων

<? showTreeMenu&#40;&#41;; ?>
Η function αυτή (η οποία επαναλαμβάνω στηρίζεται σε τροποιημένη εκδοχή της function display_children($parent, $level) του Gijs Van Tulder) με πολλά επεξηγηματικά comments:

Κώδικας: Επιλογή όλων

function showTreeMenu&#40;$parent=0, $headers=false&#41; &#123;
$counter++;
		if&#40;!$headers&#41;&#123; // καλείται μόνο μια φορά για κτίσει τα headers του menu
			buildMenuHeaders&#40;$parent&#41;;
			&#125;
// το query που ακολουθεί μας δίνει το id και τον τίτλο κάθε επιλογής του menu &#40;κατηγορίας&#41; για κάθε node που εξετάζεται
   $result = mysql_query&#40;"SELECT cat_tree.cat_id as cat_id, categories.title_gr as title FROM cat_tree, categories WHERE cat_tree.parent='$parent' and cat_tree.cat_id = categories.id"&#41;;
   while &#40;$row = mysql_fetch_array&#40;$result&#41;&#41; &#123;
if&#40;!$parent&#41;&#123;
// ετοιμάζουμε ένα νέο submenu με unordered list και το ανάλογο css class και id
echo&#40;'<ul id="ddsubmenu'.$counter.'" class="ddsubmenustyle">'&#41;;
$counter++;
&#125;
if&#40;$parent&#41;&#123;
// ετοιμάζουμε τα περιεχόμενα του submenu
   		if&#40;isparent&#40;$row&#91;cat_id&#93;&#41;&#41;&#123;
// αν είναι γονικό node τότε το submenu έχει κι' άλλο submenu
		echo&#40;'<li><a href="javascript&#58;void&#40;0&#41;">'.$row&#91;title&#93;.'</a>'&#41;;
		echo&#40;'<ul>'&#41;; // ετοιμάζουμε και το επόμενο submenu τα περιεχόμενα του οποίου θα προκύψουν από το επόμενο query όταν ξανακαλέσουμε αυτή την function &#40;βλ. παρακάτω το showTreeMenu&#40;$row&#91;cat_id&#93;, true&#41; &#41;
		$opentag=true; // έχουμε σε εξέλιξη open tags &#40;ul & li&#41; για νέο submenu
	  	&#125;else&#123; // τελευταίο node &#40;leaf&#41; οπότε δημιουργούμε link για συγκεκριμένη σελίδα...
echo&#40;'<li><a href="products.php?category='.$row&#91;cat_id&#93;.'">'.$row&#91;title&#93;.'</a></li>'&#41;;
	   &#125;  
&#125;
       showTreeMenu&#40;$row&#91;cat_id&#93;, true&#41;; // πάμε άλλη μία να ψάξουμε το δένδρο κατά ένα level πιο βαθειά!
	   if&#40;$opentag&#41;&#123; // αν έχουμε σε εξέλιξη ανοικτά tags
	   $opentag=false;
       echo&#40;'</ul></li>'&#41;; // τα κλείνουμε...
	   &#125;
if&#40;!$parent&#41;&#123;
echo&#40;'</ul>'&#41;; // κλείσιμο του μητρικού submenu tag
&#125;
&#125;
&#125;
η συγκεκριμένη function καλεί και άλλες δύο τις οποίες σας παρουσιάζω εδώ:

Κώδικας: Επιλογή όλων

function buildMenuHeaders&#40;$startlevel&#41;&#123;
global $readyheaders;
$readyheaders = 1;
echo&#40;'<div id="leftmenu" class="markermenu">'&#41;;
echo&#40;'<ul>'&#41;;
$counter = 0;
$result = mysql_query&#40;"SELECT cat_tree.cat_id as cat_id, categories.title_gr as title FROM cat_tree, categories WHERE cat_tree.parent='$startlevel' and cat_tree.cat_id = categories.id"&#41;;
while &#40;$row = mysql_fetch_array&#40;$result&#41;&#41; &#123;
$counter++;
if&#40;isparent&#40;$row&#91;cat_id&#93;&#41;&#41;&#123;
echo&#40;'<li><a href="javascript&#58;void&#40;0&#41;" rel="ddsubmenu'.$counter.'">'.$row&#91;title&#93;.'</a></li>'&#41;;
&#125;else&#123;
echo&#40;'<li><a href=products.php?category="'.$row&#91;cat_id&#93;.'">'.$row&#91;title&#93;.'</a></li>'&#41;;
&#125;
&#125;
echo&#40;'</ul>'&#41;;
echo&#40;'</div>'&#41;;
echo&#40;'<script type="text/javascript">'&#41;;
echo&#40;'ddlevelsmenu.setup&#40;"leftmenu", "sidebar"&#41;;'&#41;;
echo&#40;'</script>'&#41;;
&#125;



function isparent&#40;$cid&#41;&#123;
   $res = mysql_query&#40;"SELECT cat_id FROM cat_tree WHERE parent='$cid' LIMIT 1"&#41;;
   return mysql_num_rows&#40;$res&#41;;
&#125;
Τέλος, ως bonus σας παρουσιάζω και μια function που σας ετοιμάζει ένα select list με τα περιεχόμενα του menu για τις ανάγκες του backend!

Κώδικας: Επιλογή όλων

function fillselect&#40;$parent, $level, $headers=false&#41; &#123;
		if&#40;!$headers&#41;&#123;
    echo&#40;"<option value=0>root</option>"&#41;;
			&#125;
   $result = mysql_query&#40;"SELECT cat_id FROM cat_tree WHERE parent='$parent'"&#41;;
   while &#40;$row = mysql_fetch_array&#40;$result&#41;&#41; &#123;
       echo&#40;"<option value='".$row&#91;cat_id&#93;."'>".str_repeat&#40;'&nbsp;',$level*6&#41;.getcatname&#40;$row&#91;cat_id&#93;&#41;."</option>"&#41;;
       fillselect&#40;$row&#91;'cat_id'&#93;, $level+1, true&#41;;
   &#125;
&#125;
Αυτήν την καλούμε ως:

Κώδικας: Επιλογή όλων

<? fillselect&#40;0,0&#41;; ?>
Happy Coding 8)

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από dimsis » 12 Νοέμ 2008 15:12

Respect. Ωραίος όπως πάντα με τα tutorials σου. Και το θέμα εξαιρετικά χρήσιμο και βοηθήσει πολλούς.

Προτείνεται για βοήθημα.


gi0rg0s
Δημοσιεύσεις: 155
Εγγραφή: 25 Ιούλ 2009 06:13

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από gi0rg0s » 27 Νοέμ 2009 13:58

Θα μου επιτρέψετε να προτείνω μια εναλλακτική λύση που νομίζω ότι είναι πιο σωστή :)

Κάτι ανάλογο που έχω κάνει το υλοποίησα με Composite design pattern και xml που νομίζω είναι η ενδεδειγμένη λύση για classification.

Με xml κάνεις και λιγότερα request στη βάση δεδομένων γιατί από ότι βλέπω η συνάρτηση σου είναι reclusive!
:think: Γιατί μπαμπά; :think: - Απαντήσεις σε θέματα που όλοι έχουμε σκεφτεί παρατηρώντας την καθημερινή ζωή ! Kαι γνωμικά για να μαθαίνουμε :)

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από korgr » 27 Νοέμ 2009 16:32

gi0rg0s έγραψε:Θα μου επιτρέψετε να προτείνω μια εναλλακτική λύση που νομίζω ότι είναι πιο σωστή :)

Κάτι ανάλογο που έχω κάνει το υλοποίησα με Composite design pattern και xml που νομίζω είναι η ενδεδειγμένη λύση για classification.

Με xml κάνεις και λιγότερα request στη βάση δεδομένων γιατί από ότι βλέπω η συνάρτηση σου είναι reclusive!
Let your code and your examples speak :D

gi0rg0s
Δημοσιεύσεις: 155
Εγγραφή: 25 Ιούλ 2009 06:13

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από gi0rg0s » 27 Νοέμ 2009 16:39

Αυτή είναι μια πρόκληση την οποία όμως δεν μπορώ να εκπληρώσω τώρα λόγω έλειψης χρόνου :) Για να μην σας στείλω το project που προαναφέρθηκα το οποίο είναι σε java me θα μου δώσετε κάποια πίστωση χρόνου για να το φτιάξω σε php έτσι ; ;)
:think: Γιατί μπαμπά; :think: - Απαντήσεις σε θέματα που όλοι έχουμε σκεφτεί παρατηρώντας την καθημερινή ζωή ! Kαι γνωμικά για να μαθαίνουμε :)

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από korgr » 27 Νοέμ 2009 18:49

Κανε τις δουλειτσες σου, δεν χρειαζεται βιασυνη.
Απλα ειπα πως αν δημοσιευσεις καποια στιγμη και ενα παραδειγμα θα ηταν ο,τι το καλυτερο! :wink:

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από fafos » 27 Νοέμ 2009 20:02

to xml way einai gia polysyntheta menou pou travas apo polysynthetes vaseis... otan h vash einai tou style tou kontopatrioth korgr den xreiazetai na to doulepseis me xml.. antitheta an travas tis kathgories apo kapoia megalh vash to xml einai h kalyterh lysh... paradeigma..

exoume thn vash me ta proionta tou skroutz.gr... apo ekei theloume na travame mono tis kathgories pou exoun proionta kai na thn kanoume tree... anagkastika tha prepei na travhksoume stoixeia apo thn vash me ta proionta gia na doume poia proionta exoun kathgories... auto tha ton kanei ton server bouzouki an o kathe xrhsths pou mpainei sto site kalei auto(a) to query.. to xml einai monodromos to opoio mporeis ana takta diasthmata na to dhmiourgeis me kapoio cronjob kai me ena xml parser na to kaneis tree menu..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

gi0rg0s
Δημοσιεύσεις: 155
Εγγραφή: 25 Ιούλ 2009 06:13

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από gi0rg0s » 27 Νοέμ 2009 21:15

Ακριβώς! Για αυτό μίλησα για πιο "σωστή" λύση. Όχι ότι αυτή δεν κάνει την δουλειά της :) Αν έχεις πχ ένα μεγάλο site, ακόμα και για το μενού που εμφανίζεται συνέχεια οι κλήσεις στη βάση δεδομένων είναι νομίζω "ακριβές".
:think: Γιατί μπαμπά; :think: - Απαντήσεις σε θέματα που όλοι έχουμε σκεφτεί παρατηρώντας την καθημερινή ζωή ! Kαι γνωμικά για να μαθαίνουμε :)

argate7
Δημοσιεύσεις: 233
Εγγραφή: 30 Σεπ 2009 02:38

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από argate7 » 29 Νοέμ 2009 11:59

Στην περίπτωση που προσθέτεις μια κατηγορία, καλείς μια index.php αν δεν κάνω λάθος. Σε αυτή τί κάνεις? Insert και στους 2 πίνακες ταυτόχρονα? Πάντως το όλο άρθρο πολύ καλό και έχει ήδη γίνει σελιδοδείκτης!!

Άβαταρ μέλους
vcore
Δημοσιεύσεις: 354
Εγγραφή: 20 Δεκ 2003 01:19
Τοποθεσία: Crete
Επικοινωνία:

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από vcore » 16 Φεβ 2010 00:06

Sorry για το ξέθαμα.

Καλησπέρα να ρωτήσω και εγώ κάτι μιας και αυτό τον καιρό σπαζοκεφαλίαζω με ένα μενού που μάλλον θα είναι παραπάνω από 1 επιπέδου.

'Εχω τον εξής πίνακα στην Mysql:

menu_id int(11) No auto_increase
menu_parent_id int(11) No 0
menu_title varchar(255) No
menu_description varchar(255) No
menu_active tinyint(1) No 0

έχω κάνει και μια σελίδα που καταχωρώ τα μενού
εκεί έχω και ένα select box το οποίο είναι δυναμικό την ώρα που φορτώνει η σελίδα:

Κώδικας: Επιλογή όλων

                         <select name="menu_parent_id" id="menu_parent_id" class="select_box" style="width&#58; 300px">
                         <option selected="selected" value="0">-- Αρχικό Menu --</option>
						<?
						include &#40;"configuration/config.php"&#41;;
                        
                        $sql = "SELECT menu_parent_id, menu_title FROM neaeparxia_menu ".
                        "ORDER BY menu_title";
                                                
                        $rs = mysql_query&#40;$sql,$db&#41;;
						
                        while&#40;$row = mysql_fetch_array&#40;$rs&#41;&#41;
							&#123;
							  echo "<option value=\"".$row&#91;'menu_parent_id'&#93;."\">".$row&#91;'menu_title'&#93;."\n  ";
							&#125;

                        ?>        
 </select>  
Βλέπω πολλά άρθρα στο google και το menu_parent_id όταν είναι 0 είναι το αρχικό μενού. Οι τύποι όμως αυτοί προσθέτουν τα δεδομένα απο phpmyadmin. Εγώ έχω το παραπάνω select box και δεν μπορώ να ξεκολίσω στο πως θα καταχωρήσω ένα επόμενο μενού Με menu_parent_id διαφορετικό του 0.

κάποιο λάθος υπάρχει στο select box αλλά δεν μου έρχεται. Γιατί και άλλη επιλογή να πατήσω στο select box εκτός του αρχικού μενού το menu_parent_id καταχωρεί συνέχεια 0 :-?

Αν μπορεί κάποιος να με βοηθήσει θα ήμουν ευγνόμων.
Ευχαριστώ προκαταβολικός!!![/code]
Easy CMS
------------
Το να ζητάς βοήθεια δεν σημαίνει ότι είσαι εξαρτημένος.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από fafos » 16 Φεβ 2010 03:06

1. kanoume deksi klik sthn selida kai vlepoume an ta options pairnoun kanonika ta id..

2. kanoume ena aplo print - echo to id (xoris ta select) gia na doume an katevazei ta id..

3. kathe nea eggrafh sthn vash mas, efoson theloume na exei allo id ths dinoume: AUTO_INCREMENT

Άβαταρ μέλους
vcore
Δημοσιεύσεις: 354
Εγγραφή: 20 Δεκ 2003 01:19
Τοποθεσία: Crete
Επικοινωνία:

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από vcore » 16 Φεβ 2010 08:39

fafos έγραψε:1. kanoume deksi klik sthn selida kai vlepoume an ta options pairnoun kanonika ta id..

2. kanoume ena aplo print - echo to id (xoris ta select) gia na doume an katevazei ta id..

3. kathe nea eggrafh sthn vash mas, efoson theloume na exei allo id ths dinoume: AUTO_INCREMENT
Ευχαριστώ πολύ για την άμεση απάντηση. Τα έκανα αυτά που λες και τα id τα κατεβάζει κανονικά.

Μάλλον δεν έγινα τόσο κατανοητός:

Δες εδώ:

http://www.trap17.com/index.php/Creatin ... 26733.html


Σε κάποιο σημείο λέει:

INSERT INTO `categories` ( `catid` , `parentid` , `name` , `description` )

VALUES (

'', '0', 'Main Category', 'This is the description for the main category'

);

You can also create other root categories. To do this simply use the above query and just change the name and description. For it to be a root category however it must have a parentid of 0.

Αν θέλω διαφορετικό του 0 parent_id πως μπορώ να υλοποιήσω κάτι τέτοιο από την στιγμή που στην σελίδα μου δείχνω δυναμικά το list box ?

:-? [/quote]

Και ακόμα πιο συγκεκριμένα

http://www.webpage.gr/test/multilevel_c ... action=add

Δες εδώ το listbox τι γίνεται. Δεν μπορώ να καταλάβω πως μπορώ να υλοποιήσω κάτι τέτοιο.
Δηλαδή σε περίπτωση που θέλω root menu θα επιλέγω "0" που είναι η αρχική κατηγορία αλλιώς τι θα πρέπει να βάλω εκει ώστε το menu_parent_id na μην είναι 0 ? μήπως το menu_id πρέπει με συνθήκη να το κάνω = menu_parent_id ?

έχω μπερδευτεί :-?
Easy CMS
------------
Το να ζητάς βοήθεια δεν σημαίνει ότι είσαι εξαρτημένος.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από korgr » 16 Φεβ 2010 13:56

Αν διαβασεις προσεκτικα το αρθρο μου στην αρχη, λυνει την απορια σου

korgr έγραψε: Τέλος, ως bonus σας παρουσιάζω και μια function που σας ετοιμάζει ένα select list με τα περιεχόμενα του menu για τις ανάγκες του backend!

Κώδικας: Επιλογή όλων

function fillselect&#40;$parent, $level, $headers=false&#41; &#123;
		if&#40;!$headers&#41;&#123;
    echo&#40;"<option value=0>root</option>"&#41;;
			&#125;
   $result = mysql_query&#40;"SELECT cat_id FROM cat_tree WHERE parent='$parent'"&#41;;
   while &#40;$row = mysql_fetch_array&#40;$result&#41;&#41; &#123;
       echo&#40;"<option value='".$row&#91;cat_id&#93;."'>".str_repeat&#40;'&nbsp;',$level*6&#41;.getcatname&#40;$row&#91;cat_id&#93;&#41;."</option>"&#41;;
       fillselect&#40;$row&#91;'cat_id'&#93;, $level+1, true&#41;;
   &#125;
&#125;
Αυτήν την καλούμε ως:

Κώδικας: Επιλογή όλων

<? fillselect&#40;0,0&#41;; ?>
Happy Coding 8)

Άβαταρ μέλους
vcore
Δημοσιεύσεις: 354
Εγγραφή: 20 Δεκ 2003 01:19
Τοποθεσία: Crete
Επικοινωνία:

Δημιουργία πολυεπίπεδων menu πλοήγησης

Δημοσίευση από vcore » 16 Φεβ 2010 14:08

korgr έγραψε:Αν διαβασεις προσεκτικα το αρθρο μου στην αρχη, λυνει την απορια σου

korgr έγραψε: Τέλος, ως bonus σας παρουσιάζω και μια function που σας ετοιμάζει ένα select list με τα περιεχόμενα του menu για τις ανάγκες του backend!

Κώδικας: Επιλογή όλων

function fillselect&#40;$parent, $level, $headers=false&#41; &#123;
		if&#40;!$headers&#41;&#123;
    echo&#40;"<option value=0>root</option>"&#41;;
			&#125;
   $result = mysql_query&#40;"SELECT cat_id FROM cat_tree WHERE parent='$parent'"&#41;;
   while &#40;$row = mysql_fetch_array&#40;$result&#41;&#41; &#123;
       echo&#40;"<option value='".$row&#91;cat_id&#93;."'>".str_repeat&#40;'&nbsp;',$level*6&#41;.getcatname&#40;$row&#91;cat_id&#93;&#41;."</option>"&#41;;
       fillselect&#40;$row&#91;'cat_id'&#93;, $level+1, true&#41;;
   &#125;
&#125;
Αυτήν την καλούμε ως:

Κώδικας: Επιλογή όλων

<? fillselect&#40;0,0&#41;; ?>
Happy Coding 8)
thanks mate. that's exactly what i was looking for :) :kaloe:
Easy CMS
------------
Το να ζητάς βοήθεια δεν σημαίνει ότι είσαι εξαρτημένος.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης