Upadtes for the menus
authorSteve Sutton <steve@gaslightmedia.com>
Tue, 10 Nov 2015 19:45:44 +0000 (14:45 -0500)
committerSteve Sutton <steve@gaslightmedia.com>
Tue, 10 Nov 2015 19:45:44 +0000 (14:45 -0500)
Adding lib directory with navigation and menu walkers files and classes.

root/functions.php
root/lib/menu-walker.php [new file with mode: 0644]
root/lib/navigation.php [new file with mode: 0644]
root/parts/off-canvas-menu.php
root/parts/top-bar.php

index 4868803..e38572a 100644 (file)
@@ -1,5 +1,6 @@
 <?php
-
+require_once 'lib/menu-walker.php';
+require_once 'lib/navigation.php';
 
 $ancestorId   = null;
 $includePages = array();
@@ -24,139 +25,6 @@ if (!function_exists('glm_quicksite_widget_init')) {
 
 }
 
-/**
- * get_menu_options
- *
- * Grab the menu options from the theme.ini file
- */
-function glm_get_menu_options()
-{
-    static $menu_options;
-    $themeConfig = get_template_directory() . '/theme.ini';
-
-    if (!$menu_options && is_file($themeConfig)) {
-        $menu_options = parse_ini_file($themeConfig, true);
-    }
-    return $menu_options;
-}
-
-/**
- * glm_page_menu
- *
- * Grab the top level pages and their sub pages as the main navigation
- */
-function glm_page_menu($parent = 0, $class = '')
-{
-    $menuConfig   = glm_get_menu_options();
-    $frontPageId  = get_option('page_on_front');
-    $parents      = array();
-    $args         = array(
-        'post_type'   => 'page',
-        'parent'      => $parent,
-        'number'      => '',
-        'exclude'     => $frontPageId,
-        'post_status' => 'publish',
-        'sort_order'  => 'asc',
-        'sort_column' => 'menu_order'
-    );
-    if ($parent == 0 && $menuConfig['menu_options']['main_level_pages']) {
-        $args['include'] = $menuConfig['menu_options']['main_level_pages'];
-    }
-    $pages = get_pages($args);
-    echo '<ul'.(($class)?' class="'.$class.'"':'').'><!-- begin -->'."\n";
-    foreach ($pages as $page) {
-        $childs = get_pages('child_of=' . $page->ID);
-        if (count($childs) > 0) {
-            echo '<li class="has-dropdown">'."\n";
-            echo '<a href="'.get_permalink($page->ID).'">'.$page->post_title.'</a>'."\n";
-            echo glm_page_menu($page->ID, 'sub-menu dropdown');
-            echo '</li>'."\n";
-        } else {
-            echo '<li><a href="'.get_permalink($page->ID).'">'.$page->post_title.'</a></li>'."\n";
-        }
-    }
-    echo '</ul><!-- end -->'."\n";
-}
-
-register_nav_menus(array(
-  'top-bar' => 'Site Navigation',
-  //'mobile-off-canvas' => 'Mobile',
-//  'footer' => 'Footer'
-));
-
-if ( ! function_exists( 'feature_top_bar' ) ) {
-  function feature_top_bar() {
-      wp_nav_menu(array(
-          'container' => false,                           // remove nav container
-          'container_class' => '',                        // class of container
-          'menu' => '',                                   // menu name
-          'menu_class' => '',                             // adding custom nav class
-          'theme_location' => 'top-bar',                  // where it's located in the theme
-          'before' => '',                                 // before each link <a>
-          'after' => '',                                  // after each link </a>
-          'link_before' => '',                            // before each link text
-          'link_after' => '',                             // after each link text
-          'depth' => 3,                                   // limit the depth of the nav
-          'fallback_cb' => false,                         // fallback function (see below)
-          'walker' => new Feature_Top_Bar_Walker()
-      ));
-  }
-}
-if ( ! class_exists( 'Feature_Top_Bar_Walker' ) ) :
-class Feature_Top_Bar_Walker extends Walker_Nav_Menu {
-
-    function display_element( $element, &$children_elements, $max_depth, $depth = 0, $args, &$output ) {
-        static $mainLevelCounter;
-        if ($depth == 0) {
-            ++$mainLevelCounter;
-        }
-        $element->has_children = ! empty( $children_elements[ $element->ID ] );
-        $element->classes[] = ( $element->current || $element->current_item_ancestor ) ? 'active' : '';
-        $element->classes[] = ( $element->has_children && 1 !== $max_depth ) ? 'has-dropdown' : '';
-        $element->classes[] = ( $element->post_parent == 0 && $mainLevelCounter < 6 ) ? '' : 'drop-left';
-        parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
-    }
-
-    function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
-        $item_html = '';
-        parent::start_el( $item_html, $object, $depth, $args );
-
-        // Insert style to display page's thumbnail
-        $item_style = '';
-        if ($depth == 0 && has_post_thumbnail((int)$object->object_id)) {
-            $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id((int)$object->object_id), 'bpla-drop-down');
-            //$item_style .= "<style>#menu-item-".$object->ID." > .dropdown:before { background-image: url('".$thumbnail[0]."');</style>";
-        }
-        //$output .= ( 0 == $depth ) ? '<li class="divider"></li>' : '';
-        $classes = empty( $object->classes ) ? array() : (array) $object->classes;
-        if ( in_array( 'label', $classes ) ) {
-            //$output .= '<li class="divider"></li>';
-            $item_html = preg_replace( '/<a[^>]*>(.*)<\/a>/iU', '<label>$1</label>', $item_html );
-        }
-        if ( in_array( 'divider', $classes ) ) {
-            $item_html = preg_replace( '/<a[^>]*>( .* )<\/a>/iU', '', $item_html );
-        }
-        if ($item_style) {
-            $output .= $item_style;
-        }
-        if ($depth == 0 && has_post_thumbnail((int)$object->object_id) && $object->has_children) {
-            $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id((int)$object->object_id), 'bpla-drop-down');
-            $item_html .= '<script>var img_for_menu_' . $object->ID . ' = "' . $thumbnail[0] . '";</script>';
-            //$item_html .= '<pre>' . print_r($object, true) . '</pre>';
-        }
-        $output .= $item_html;
-    }
-
-    function start_lvl( &$output, $depth = 0, $args = array() ) {
-        if ($depth == 0) {
-            $output .= "\n<ul class=\"sub-menu dropdown\">\n";
-            $output .= "\n<li class=\"image-placeholder\">";
-            $output .= "</li>\n";
-        }
-    }
-
-}
-endif;
 /**
  * Return the client info option for the given key
  *
@@ -181,20 +49,6 @@ if (!function_exists('glm_get_clientinfo_option')) {
     }
 }
 
-/**
- * glm_offcanvas_menu
- *
- * Generate the list of pages as nested ul li list
- */
-function glm_offcanvas_menu()
-{
-    wp_page_menu(array(
-        'depth' => 0,
-        'sort_column' => 'menu_order',
-        'menu_class' => 'left-off-canvas-list'
-    ));
-}
-
 add_theme_support('post-thumbnails');
 set_post_thumbnail_size(120, 100, true);
 /**
@@ -253,24 +107,6 @@ function glm_get_header() {
 //    echo '</div>';
 //    echo '</div>';
 
-
-function glm_side_menu() {
-    global $post;
-    $parents = get_post_ancestors($post->ID);
-    $id = ($parents) ? $parents[count($parents)-1]: $post->ID;
-    $parent = get_page( $id );
-    if ($id == 0) {
-        $ID = $post->ID;
-    } else {
-        $ID = $parent->ID;
-    }
-    echo '<h1>'.get_the_title($ID).'</h1>';
-    echo '<ul class="sidebar"><!-- begin -->'."\n";
-    echo wp_list_pages( 'child_of='.$ID.'&title_li=&depth=1&echo=0');
-    echo '</ul><!-- end -->'."\n";
-}
-
-
 add_action('wp_enqueue_scripts', 'glm_site_scripts');
 
 
diff --git a/root/lib/menu-walker.php b/root/lib/menu-walker.php
new file mode 100644 (file)
index 0000000..64b5a96
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Customize the output of menus for Foundation top bar
+ */
+if ( ! class_exists( 'Glm_Theme_Top_Bar_Walker' ) ) :
+class Glm_Theme_Top_Bar_Walker extends Walker_Nav_Menu {
+    function display_element( $element, &$children_elements, $max_depth, $depth = 0, $args, &$output ) {
+        static $mainLevelCounter;
+        if ($depth == 0) {
+            ++$mainLevelCounter;
+        }
+        $element->has_children = ! empty( $children_elements[ $element->ID ] );
+        $element->classes[] = ( $element->current || $element->current_item_ancestor ) ? 'active' : '';
+        $element->classes[] = ( $element->has_children && 1 !== $max_depth ) ? 'has-dropdown' : '';
+        $element->classes[] = ( $element->post_parent == 0 && $mainLevelCounter < 6 ) ? '' : 'drop-left';
+        parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
+    }
+
+    function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
+        $item_html = '';
+        parent::start_el( $item_html, $object, $depth, $args );
+
+        // Insert style to display page's thumbnail
+        $item_style = '';
+        if ($depth == 0 && has_post_thumbnail((int)$object->object_id)) {
+            $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id((int)$object->object_id), 'large');
+            $item_style .= "<style>#menu-item-".$object->ID." > .dropdown:before { background-image: url('".$thumbnail[0]."');</style>";
+        }
+        //$output .= ( 0 == $depth ) ? '<li class="divider"></li>' : '';
+        $classes = empty( $object->classes ) ? array() : (array) $object->classes;
+        if ( in_array( 'label', $classes ) ) {
+            //$output .= '<li class="divider"></li>';
+            $item_html = preg_replace( '/<a[^>]*>(.*)<\/a>/iU', '<label>$1</label>', $item_html );
+        }
+        if ( in_array( 'divider', $classes ) ) {
+            $item_html = preg_replace( '/<a[^>]*>( .* )<\/a>/iU', '', $item_html );
+        }
+        if ($item_style)
+            $output .= $item_style;
+        $output .= $item_html;
+    }
+
+    function start_lvl( &$output, $depth = 0, $args = array() ) {
+        $output .= "\n<ul class=\"sub-menu dropdown\">\n";
+    }
+}
+endif;
+if ( ! class_exists( 'Glm_Theme_Off_Canvas_Walker' ) ) :
+class Glm_Theme_Off_Canvas_Walker extends Walker_Nav_Menu {
+    function display_element( $element, &$children_elements, $max_depth, $depth = 0, $args, &$output ) {
+        $element->has_children = ! empty( $children_elements[ $element->ID ] );
+        $element->classes[] = ( $element->current || $element->current_item_ancestor ) ? 'active' : '';
+        $element->classes[] = ( $element->has_children && 1 !== $max_depth ) ? 'page_item_has_children' : '';
+        $element->classes[] = 'page_item';
+
+        parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
+    }
+
+    function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
+        $item_html = '';
+        parent::start_el( $item_html, $object, $depth, $args );
+
+        $classes = empty( $object->classes ) ? array() : (array) $object->classes;
+
+        if ( in_array( 'label', $classes ) ) {
+            $item_html = preg_replace( '/<a[^>]*>(.*)<\/a>/iU', '<label>$1</label>', $item_html );
+        }
+
+        $output .= $item_html;
+    }
+
+    function start_lvl( &$output, $depth = 0, $args = array() ) {
+        $output .= "\n<ul class=\"children\">\n";
+    }
+
+    function end_lvl(&$output, $depth = 0, $args = array()){
+        $output .= '</ul>';
+    }
+}
+endif;
+?>
diff --git a/root/lib/navigation.php b/root/lib/navigation.php
new file mode 100644 (file)
index 0000000..a47a8a0
--- /dev/null
@@ -0,0 +1,155 @@
+<?php
+
+register_nav_menus(array(
+  'top-bar' => 'Site Navigation'
+));
+
+/**
+ * Top Bar
+ */
+if ( ! function_exists( 'glm_theme_top_bar' ) ) {
+  function glm_theme_top_bar() {
+      wp_nav_menu(array(
+          'container' => false,                           // remove nav container
+          'container_class' => '',                        // class of container
+          'menu' => '',                                   // menu name
+          'menu_class' => '',                             // adding custom nav class
+          'theme_location' => 'top-bar',                  // where it's located in the theme
+          'before' => '',                                 // before each link <a>
+          'after' => '',                                  // after each link </a>
+          'link_before' => '',                            // before each link text
+          'link_after' => '',                             // after each link text
+          'depth' => 3,                                   // limit the depth of the nav
+          'fallback_cb' => false,                         // fallback function (see below)
+          'walker' => new Glm_Theme_Top_Bar_Walker()
+      ));
+  }
+}
+
+/**
+ * Mobile off-canvas
+ */
+if ( ! function_exists( 'glm_theme_mobile_off_canvas' ) ) {
+  function glm_theme_mobile_off_canvas() {
+      wp_nav_menu(array(
+          'container' => false,                           // remove nav container
+          'container_class' => '',                        // class of container
+          'menu' => '',                                   // menu name
+          'menu_class' => 'off-canvas-list',              // adding custom nav class
+          'theme_location' => 'top-bar',        // where it's located in the theme
+          'before' => '',                                 // before each link <a>
+          'after' => '',                                  // after each link </a>
+          'link_before' => '',                            // before each link text
+          'link_after' => '',                             // after each link text
+          'depth' => 5,                                   // limit the depth of the nav
+          'fallback_cb' => false,                         // fallback function (see below)
+          'walker' => new Glm_Theme_Off_Canvas_Walker()
+      ));
+  }
+}
+
+/**
+ * Footer
+ */
+if ( ! function_exists( 'glm_theme_footer' ) ) {
+  function glm_theme_footer() {
+      wp_nav_menu(array(
+          'container' => false,                           // remove nav container
+          'container_class' => '',                        // class of container
+          'menu' => '',                                   // menu name
+          'menu_class' => '',                             // adding custom nav class
+          'theme_location' => 'footer',                   // where it's located in the theme
+          'before' => '',                                 // before each link <a>
+          'after' => '',                                  // after each link </a>
+          'link_before' => '',                            // before each link text
+          'link_after' => '',                             // after each link text
+          'depth' => 1,                                   // limit the depth of the nav
+          'fallback_cb' => false,                         // fallback function (see below)
+      ));
+  }
+}
+
+/**
+ * glm_page_menu
+ *
+ * Grab the top level pages and their sub pages as the main navigation
+ */
+function glm_page_menu($parent = 0, $class = '')
+{
+    $menuConfig   = glm_get_menu_options();
+    $frontPageId  = get_option('page_on_front');
+    $parents      = array();
+    $args         = array(
+        'post_type'   => 'page',
+        'parent'      => $parent,
+        'number'      => '',
+        'exclude'     => $frontPageId,
+        'post_status' => 'publish',
+        'sort_order'  => 'asc',
+        'sort_column' => 'menu_order'
+    );
+    if ($parent == 0 && $menuConfig['menu_options']['main_level_pages']) {
+        $args['include'] = $menuConfig['menu_options']['main_level_pages'];
+    }
+    $pages = get_pages($args);
+    echo '<ul'.(($class)?' class="'.$class.'"':'').'><!-- begin -->'."\n";
+    foreach ($pages as $page) {
+        $childs = get_pages('child_of=' . $page->ID);
+        if (count($childs) > 0) {
+            echo '<li class="has-dropdown">'."\n";
+            echo '<a href="'.get_permalink($page->ID).'">'.$page->post_title.'</a>'."\n";
+            echo glm_page_menu($page->ID, 'sub-menu dropdown');
+            echo '</li>'."\n";
+        } else {
+            echo '<li><a href="'.get_permalink($page->ID).'">'.$page->post_title.'</a></li>'."\n";
+        }
+    }
+    echo '</ul><!-- end -->'."\n";
+}
+
+/**
+ * glm_offcanvas_menu
+ *
+ * Generate the list of pages as nested ul li list
+ */
+function glm_offcanvas_menu()
+{
+    wp_page_menu(array(
+        'depth' => 0,
+        'sort_column' => 'menu_order',
+        'menu_class' => 'left-off-canvas-list'
+    ));
+}
+
+/**
+ * get_menu_options
+ *
+ * Grab the menu options from the theme.ini file
+ */
+function glm_get_menu_options()
+{
+    static $menu_options;
+    $themeConfig = get_template_directory() . '/theme.ini';
+
+    if (!$menu_options && is_file($themeConfig)) {
+        $menu_options = parse_ini_file($themeConfig, true);
+    }
+    return $menu_options;
+}
+
+function glm_side_menu() {
+    global $post;
+    $parents = get_post_ancestors($post->ID);
+    $id = ($parents) ? $parents[count($parents)-1]: $post->ID;
+    $parent = get_page( $id );
+    if ($id == 0) {
+        $ID = $post->ID;
+    } else {
+        $ID = $parent->ID;
+    }
+    echo '<h1>'.get_the_title($ID).'</h1>';
+    echo '<ul class="sidebar"><!-- begin -->'."\n";
+    echo wp_list_pages( 'child_of='.$ID.'&title_li=&depth=1&echo=0');
+    echo '</ul><!-- end -->'."\n";
+}
+
index c9f9451..6ef952a 100644 (file)
@@ -1,4 +1,4 @@
 <aside class="left-off-canvas-menu hide-for-large-up">
-    <?php glm_offcanvas_menu(); ?>
+    <?php glm_theme_mobile_off_canvas(); ?>
     <?php get_template_part('parts/client-info-offcanvas');?>
 </aside>
index 8e2bfb3..d34aeb2 100644 (file)
@@ -1,6 +1,6 @@
 <nav class="top-bar show-for-large-up" data-topbar role="navigation">
     <section class="top-bar-section">
-        <?php glm_page_menu(); ?>
+        <?php glm_theme_top_bar(); ?>
     </section>
 </nav>
 <nav class="tab-bar show-for-medium-down">