/** * Output a navigation menu * */ public function OutputMenu($menu, $start_level, $source_menu = false) { global $page, $gp_menu, $gp_titles, $GP_MENU_LINKS, $GP_MENU_CLASS, $GP_MENU_CLASSES; //source menu if ($source_menu === false) { $source_menu =& $gp_menu; } // opening ul $attr_ul = $this->clean_attributes; $attr_ul['class']['menu_top'] = $GP_MENU_CLASSES['menu_top']; if (\gp\tool\Output::$edit_area_id) { $attr_ul['id'] = \gp\tool\Output::$edit_area_id; $attr_ul['class']['editable_area'] = 'editable_area'; } // Without any output the menu wouldn't be editable // An empty <ul> is not valid if (!count($menu)) { $attr_ul['class']['empty_menu'] = 'empty_menu'; $this->FormatMenuElement('div', $attr_ul); echo '</div>'; return; } $this->prev_level = $start_level; $open = false; $li_count = array(); $this->parents = \gp\tool::Parents($page->gp_index, $source_menu); //output $this->FormatMenuElement('ul', $attr_ul); $menu = array_keys($menu); foreach ($menu as $menu_ii => $menu_key) { $this->curr_key = $menu_key; $this->curr_info = $source_menu[$menu_key]; $this->curr_level = $this->curr_info['level']; if ($this->HiddenLevel()) { continue; } $attr_a = $this->MenuAttributesA(); $attr_li = $this->clean_attributes; $attr_ul = $this->clean_attributes; //ordered or "indexed" classes if ($page->menu_css_ordered && !empty($GP_MENU_CLASSES['li_'])) { for ($i = $this->prev_level; $i > $this->curr_level; $i--) { unset($li_count[$i]); } if (!isset($li_count[$this->curr_level])) { $li_count[$this->curr_level] = 0; } else { $li_count[$this->curr_level]++; } $attr_li['class']['li_'] = $GP_MENU_CLASSES['li_'] . $li_count[$this->curr_level]; } if ($page->menu_css_indexed && !empty($GP_MENU_CLASSES['li_title_'])) { $attr_li['class']['li_title_'] = $GP_MENU_CLASSES['li_title_'] . $this->curr_key; } //selected classes $next_index = $menu_ii + 1; if (array_key_exists($next_index, $menu)) { $next_index = $menu[$next_index]; if ($this->curr_level < $source_menu[$next_index]['level']) { $attr_a['class']['haschildren'] = $GP_MENU_CLASSES['haschildren']; $attr_li['class']['haschildren_li'] = $GP_MENU_CLASSES['haschildren_li']; } } $this->Attrs($attr_a, $attr_li); $this->FormatStart($menu_ii, $attr_li, $attr_ul, $open); $this->FormatMenuElement('li', $attr_li); $this->FormatMenuElement('a', $attr_a); $this->prev_level = $this->curr_level; $open = true; } $this->CloseLevel($start_level); if ($open) { echo '</li></ul>'; } }
/** * Traverse the main menu upwards looking for a configuration setting for $var * Start at the title represented by $checkId * Set $value to the configuration setting if a parent page has the configuration setting * * @return bool */ static function ParentConfig($checkId, $var, &$value) { global $gp_titles, $gp_menu; $parents = \gp\tool::Parents($checkId, $gp_menu); foreach ($parents as $parent_index) { if (!empty($gp_titles[$parent_index][$var])) { $value = $gp_titles[$parent_index][$var]; return true; } } return false; }
/** * Get the css class representing the current page's visibility * */ public static function VisibilityClass($class, $index) { global $gp_menu, $gp_titles; if (isset($gp_titles[$index]['vis'])) { $class .= ' private-list'; return $class; } $parents = \gp\tool::Parents($index, $gp_menu); foreach ($parents as $parent_index) { if (isset($gp_titles[$parent_index]['vis'])) { $class .= ' private-inherited'; break; } } return $class; }