/** * Gibt die Navigation in Form eines Arrays zurück * * @return array Navigation */ private function _getMenues() { static $nav_arr = null; /* Navigation nur Aufrufen, falls dies noch nicht getan wurde */ if (!is_array($nav_arr)) { $nav_arr = array(); $topid_arr = array(); $page = new Page($this->_smarty, $this->_mysql); $this->_mysql->query("SELECT `menu_topid`, COUNT(*) as 'count' FROM `menu` GROUP BY `menu_topid`"); $i = 0; while (($data = $this->_mysql->fetcharray('assoc')) !== false) { $topid_arr[$i] = (int) $data['menu_topid']; $i++; } $page->let_build_menu_array($topid_arr, $nav_arr, false, true); } return $nav_arr; }
/** * Gibt die Navigation in Form eines Arrays zurück * * @param int $start Start * @param int $number Anzahl * @param boolean $unit_topid untergeordnete Menus eines Topid-Menus (topid = 0) nicht trennen * @return array Navigation */ private function _getMenues($start = null, $number = null, $unit_topid = true) { static $nav_arr = null; static $count_nav = null; /* Navigation nur Aufrufen, falls dies noch nicht getan wurde */ if (!is_array($nav_arr)) { $nav_arr = array(); $topid_arr = array(); $page = new Page($this->_smarty, $this->_mysql); $this->_mysql->query("SELECT `menu_topid`, COUNT(*) as 'count' FROM `menu` GROUP BY `menu_topid`"); $i = 0; while (($data = $this->_mysql->fetcharray('assoc')) !== false) { $topid_arr[$i] = (int) $data['menu_topid']; $i++; } $page->let_build_menu_array($topid_arr, $nav_arr, false, true, true, array('menu_position', 'menu_pagetyp', 'menu_display')); $count_nav['all'] = count($nav_arr); $count_nav['top'] = array(); $i = 0; $count_nav['top'][0] = 0; foreach ($nav_arr as $value) { if ($value['menu_topid'] == 0) { //$i = $value['menu_ID']; $i++; $count_nav['top'][$i] = 1; } else { $count_nav['top'][$i]++; } } } /* Hier wird nun der Bereich ausgewertet, welcher Teil des Menus zurückgegeben werden soll */ if (isset($start)) { /* ist $unit_tropid true, wird eine topid = 0 und die darunterliegenden Menupunkte NICHT * getrennt, auch wenn die Anzahl der Menupunkte grösser ist als $number * Hat z.B. news (topid = 0) 10 darunterliegende Menupunkte, aber $number ist 7, wird news nicht * aufgeteilt, sondern als Einheit bewahrt. */ if ($unit_topid == true) { $start = (int) $start; $count_start = 0; /*$i ist das Startelement von $nav_arr*/ /* Die Anzahl Menupunkte für ein Topid (topid-menupunkt und darunterliegende) * sind in $count_nav['top'] aufgelistet. In dieser Schleife werden nun die * Anzahl Menupunkte zusammengezählt (speichern in $count_start), bis $start * erreicht wird. Ist $count_start nun grösser als $start, spielt das insofern * keine Rolle, weil die Topids zusammengehalten werden. */ for ($i = 0; $count_start < $start && $i < count($count_nav['top']); $i++) { $count_start += $count_nav['top'][$i]; } if (isset($number)) { $number = (int) $number; $count_number = 0; /* Selbes Vorgehen wie bei der vorherigen For-Schleife */ for ($j = $i; $count_number < $count_start + $number && $j < count($count_nav['top']); $j++) { $count_number += $count_nav['top'][$j]; } return array_slice($nav_arr, $count_start, $count_number); } else { return array_slice($nav_arr, $count_start); } } else { /* Topids werde nicht zusammengehalten => einfaches Aufsplitten der Menues */ if (isset($number)) { return array_slice($nav_arr, $start, $number); } else { return array_slice($nav_arr, $start); } } } /* Ohne Angabe von $start wird die gesammte Navigation zurückgegeben */ return $nav_arr; }