Δημιουργία dynamic menu

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

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

Απάντηση
Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

Δημιουργία dynamic menu

Δημοσίευση από papatzas » 29 Αύγ 2007 00:59

Προσπαθώ να φτιάξω ένα dynamic menu με χρήση κατηγοριών και υποκατηγοριών, κάτι αντίστοιχο με την αναπαράσταση :

Μενου
---------------------------------

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

 Αυτοκίνητα	
	-Toyota
 	     -Colora
	           -Βlack
	           -White
	     -Carina
	     -Yaris
	- Audi
	- Citroen
     Moto
Sql

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

id   |    parent   |   label
--------------------------------------
1          0          Αυτοκίνητα	
2          1          Toyota
3          1          Audi
4          1          Citroen
5          2          Colora
6          2          Carina
7          2          Yaris
8          0          Moto
9          5          Black
10         5          White


Χρησιμοποιώ την get_parent() για να πάρω την κατηγορία που ανήκει ένα id

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

$query = "SELECT parent FROM $this->table WHERE id = '$id'";	

Χρησιμοποιώ την get_children() για να πάρω τις υποκατηγορίες ενός id

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

$query = "SELECT id, label FROM $this->table WHERE parent = '$id'";	



Και χρησιμοποιώ την get_path ώστε να πάρω σταδιακά το id κάθε βήματος, και τα περνώ σε ένα πίνακα αναδρομικά

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


// id = 5  Array ( [0] => 0   [1] => 2

function get_path($id) {
		
		$parent = $this->get_parent($id);

		if(!is_array($path))
		$path = array();
	
		if ( $parent!='' )
		{	   		
	       		$path[] = $parent;		  
	       		$path = array_merge($this->get_path($parent), $path); // anadromi
		 	   	       
		} 		
		return $path;	   	   
	}
Το πρόβλημα είναι κατα την εμφάνιση του μενού, αν επιλέξω βάση του παραδείγματος πιο πάνω την επιλογή "colora" δεν μου εμφανίζει και το επόμενο επίπεδο όπου είναι το black, white αλλά τα "Colora","Carina","Yaris"

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

Αυτοκίνητα	
	-Toyota
	     -Colora
	     -Carina
	     -Yaris
	- Audi
	- Citroen
     Moto
Τελευταία επεξεργασία από το μέλος papatzas την 17 Νοέμ 2007 16:20, έχει επεξεργασθεί 3 φορές συνολικά.
:-)

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Δημιουργία dynamic menu

Δημοσίευση από Banavas » 29 Αύγ 2007 12:26

H parent κατηγορία του Corola (και όχι colora) αναφέρεται στο πεδίο id και όχι στο πεδίο parent.

Δηλαδή η get_parent() πρέπει να γίνει

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

 $query = "SELECT id FROM $this->table WHERE id = '$id'";   
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Δημιουργία dynamic menu

Δημοσίευση από cherouvim » 29 Αύγ 2007 14:00

Χτυπάς πολλά queries για να κάνεις κάτι μικρό.
Φέρτα όλα στη PHP και επεξεργάσου τα εκεί.

Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

Δημιουργία dynamic menu

Δημοσίευση από papatzas » 29 Αύγ 2007 14:57

Banavas έγραψε:H parent κατηγορία του Corola (και όχι colora) αναφέρεται στο πεδίο id και όχι στο πεδίο parent.

Δηλαδή η get_parent() πρέπει να γίνει

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

 $query = "SELECT id FROM $this->table WHERE id = '$id'";   
αυτό τι νόημα έχει ? να πάρω το ίδιο id...


cherouvim έχεις να προτείνεις κάτι συγκεκρυμμένο για να καταλάβω τι ενοείς?
Τελευταία επεξεργασία από το μέλος papatzas την 29 Αύγ 2007 21:19, έχει επεξεργασθεί 1 φορά συνολικά.
:-)

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Δημιουργία dynamic menu

Δημοσίευση από Banavas » 29 Αύγ 2007 15:41

Εχεις δίκιο δεν το σκευτηκα σωστά.
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

Δημιουργία dynamic menu

Δημοσίευση από papatzas » 17 Νοέμ 2007 14:00

Είχε δίκιο ο cheruvim, δίνω αυτό που έκανα

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

function get_path($id) 
	{		
		$parent = $this->get_parent($id);		
		if(!is_array($path)) $path = array();
	
		if ($parent!='')
		{	   		
	       $path[] = $parent;		  
	       $path = array_merge($this->get_path($parent), $path); 	 	   	       
		}		
		return $path;	   	   
	} 
	
	
	
	function full_path()
	{
		$id = $this->id;
		$p = $this->get_path($id);
		$p[] = $id;
		return $p;		
	}
	

	function get_menu($index=0,$deep=0) 
	{
	
		$cat = $this->full_path();
		
	//	if&#40;$index < count&#40;$cat&#41;&#41;
	//	&#123;
			$query = "SELECT id,label FROM $this->table WHERE parent = '$cat&#91;$deep&#93;'";
		    $result = $this->query&#40;$query&#41;;
		    
			print "<ul>";
			while &#40;$row = mysql_fetch_array&#40;$result&#41;&#41;
			&#123;
				print "<li><a href=?id=".$row&#91;'id'&#93;.">".$row&#91;'label'&#93;."</a>";
				
				if&#40;in_array&#40;$row&#91;0&#93;,$cat&#41;&#41;
				&#123;				
					//$index++;	
				    $this->get_menu&#40;$index,$deep+1&#41; ;	
				&#125;						
			&#125;			
			print "</ul>";
	//	&#125;	
			
	&#125;

:-)

Απάντηση

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

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

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