ChronologischDie Datei z_menu.php5 war ursprünglich nur für die Menüsteuerung gedacht. Inzwischen enthält sie include Anweisungen für alle allgemein notwendigen Dateien. Die hier benötigte Variable $script_name kommt aus der Datei z_globals.php5, die sie bereits von vorigen Beispielen unter PHP kennen sollten. ... include ($dir.'php/z_globals.php5'); include ($dir.'/php/z_menuedbclass.php5'); $MENUE= new MenueDbMapper(); ... Die Vorgehensweise also: 2 stufigDas Script holt sich an Hand des Dateinamens (in $script_name) die Zeile, die für sie zuständig ist. $pd = $MENUE->get_Page_Data($script_name);Die hieraus gewonnenen Informationen reichen jetzt, um eine Abfrage zu starten, die jeweils nur die, aus Sicht dieses Scripts, relevanten Menüpunkte ausliest. Für das MainMenü oben waagerecht $menue = $MENUE->get_Main_Menue($pd);und das Menü links senkrecht $m = $MENUE->get_Menue_Data($pd); Die Datei z_menueclass.php5 class Page { private $daten; public function __construct($page = null) { $this->daten = array('ord' => '' 'parent_ord' => '', 'pfad'=> '', 'verz_level' => '', 'gruppe'=> '', 'datei'=> '', 'menue_text'=> '', 'main'=>'', 'menue_level'=> '', 'selektor1'=> '', 'selektor2'=> '', 'selektor3'=> '', 'selektor4'=> '', 'description'=> '', 'keywords'=>''); if (is_array($page)) { foreach ($page as $feld => $wert){ $this->$feld = $wert; } } } public function __set($eigenschaft, $wert){ $this->daten[$eigenschaft] = $wert; } public function __get($eigenschaft){ if (isset($this->daten[$eigenschaft])) { return $this->daten[$eigenschaft]; } else { return false; } } public function get_datei() { return substr_replace($this->daten['datei'],'', strpos($this->daten['datei'],'.php5')); } } und die Datei z_menuedbclass.php5 class MenueDbMapper extends BaseDbMapper { public function __construct (){ parent::__construct(); } public function get_Page_Data($datei) { if (is_numeric($datei)) { $ext = "ord = $datei"; } else { $ext = "if(pfad like '.',concat('/',datei), concat('/',pfad,'/',datei)) like '$datei'"; } $sql = " SELECT ord, parent_ord, pfad, repeat('../',verz_level) as verz_level, gruppe, datei, menue_text, main, menue_level, selektor1, selektor2, selektor3, selektor4, description, keywords FROM seite WHERE $ext"; $result = $this->base_query($sql); return new Page($result->fetch_assoc()); } public function get_Main_Menue($pd) { $returnlist = array(); $sql = " SELECT menue_level, pfad, gruppe, datei, menue_text, main, REPEAT('../',verz_level) as verz_level, IF (menue_level like '$pd->selektor1' || menue_level like '$pd->selektor2' || menue_level like '$pd->selektor3' || menue_level like '$pd->selektor4','m_act','') AS menue_class FROM seite WHERE menue_level like '_00000000' ORDER BY menue_level asc "; $result = $this->base_query($sql); while ($row = $result->fetch_object()){ $returnlist[] = $row; } return $returnlist; } public function get_Menue_Data ($pd) { $returnlist = array(); $sql = " SELECT menue_level, pfad, datei, menue_text, REPEAT('../',verz_level) as verz_level, IF (ord = $pd->ord,'m_act','') as menue_class FROM seite WHERE menue_level like '$pd->selektor1' || menue_level like '$pd->selektor2' || menue_level like '$pd->selektor3' || menue_level like '$pd->selektor4' ORDER BY menue_level asc "; $result = $this->base_query($sql); while ($row = $result->fetch_object()){ $returnlist[] = $row; } return $returnlist; } } |
||