Structured Menu

Structured Menu is a GetSimple-plugin, that translates the flat menustructure of the GetSimple-standard-menu into a structured one. The plugin is an hybrid, to speed up its performance in the render-phase.

The download and the use of Structured Menu is free and unlimited! You can get it here: http://www.hofrichter.net/getsimple/structured-menu.zip

Architecture and features

The part, that implements the hookin-action is designed to speed up the component-output while the render-phase. It reads the menu-structure to build up the final structured menu. The plugin-logic translates the one-dimensional array into a n-dimensional array (n = maximum menu-depth). The configuration is saved as a json-object.

The function-part is the logic, that you (the template-designer/-developer) use to inject the menu into your page. You can choose between two kinds of data-output and three kinds of filtering.

Usage

Structured Menu implements two functions, that you can use in your template:
  1. get_structured_menu(...)
  2. get_structured_menu_array(...)

HTML with get_structured_menu(...)

This function returns a wellformed HTML-structure. There are three options.

Option 1: default-setup

The default-implementation (with no function-attributes) can be done like this (place this in your template):

<?php get_structured_menu(); ?>

The ouput will be like the following example. The values of the class-attribute are always like shown in the example and contains enough informations to build up a clear css-design. The options of the links <a ...>...</a> will contain the individual settings of your menu.

<ul class="menu-level-0">
    <li class="menu-item-0"><a href="?id=page1" title="Page-title 1">Page-title 1</a>
        <ul class="menu-level-1">
            <li class="menu-item-0"><a href="?id=page1-1" title="Page-title 1.1">Page-title 1.1</a></li>
            <li class="menu-item-1"><a href="?id=page1-2" title="Page-title 1.2">Page-title 1.2</a></li>
            <li class="menu-item-2"><a href="?id=page1-3" title="Page-title 1.3">Page-title 1.3</a></li>
        </ul>
    </li>
    <li class="menu-item-1"><a href="?id=page2" title="Page-title 2">Page-title 2</a>
        <ul class="menu-level-1">
            <li class="menu-item-0"><a href="?id=page2.1" title="Page-title 2.1">Page-title 2.1</a>
                <ul class="menu-level-2">
                    <li class="menu-item-0"><a href="?id=page2-2-1" title="Page-title 2.2.1">Page-title 2.2.1</a></li>
                    <li class="menu-item-1"><a href="?id=page2-2-2" title="Page-title 2.2.2">Page-title 2.2.2</a></li>
                    <li class="menu-item-2"><a href="?id=page2-2-3" title="Page-title 2.2.3">Page-title 2.2.3</a></li>
                </ul>
            </li>
            <li class="menu-item-1"><a href="?id=page2-2" title="Page-title 2.2">Page-title 2.2</a></li>
        </ul>
    </li>
    <li class="menu-item-1"><a href="?id=page3" title="Page-title 3">Page-title 3</a></li>
</ul>

Option 2: filter-setup whitout path to root

It is possible to display this part of the menu, that matches the given slug (first parameter of the function). Attention: Structured Menu works on the built-in menu definition only. You can not filter for pages, that are not part of the menu.

<?php get_structured_menu('page2.1'); ?>

The ouput will be like the following example.

<ul class="menu-level-0">
    <li class="menu-item-0"><a href="?id=page2.1" title="Page-title 2.1">Page-title 2.1</a>
        <ul class="menu-level-1">
            <li class="menu-item-0"><a href="?id=page2-2-1" title="Page-title 2.2.1">Page-title 2.2.1</a></li>
            <li class="menu-item-1"><a href="?id=page2-2-2" title="Page-title 2.2.2">Page-title 2.2.2</a></li>
            <li class="menu-item-2"><a href="?id=page2-2-3" title="Page-title 2.2.3">Page-title 2.2.3</a></li>
        </ul>
    </li>
</ul>

Option 3: filter-setup whit the path to root

The same filter as shown in "option 2", but incl. the path to the root-menu-item.

<?php get_structured_menu('page2.1', true); ?>

The ouput will be like the following example.

<ul class="menu-level-0">
    <li class="menu-item-0"><a href="?id=page2" title="Page-title 2">Page-title 2</a>
        <ul class="menu-level-1">
            <li class="menu-item-0"><a href="?id=page2.1" title="Page-title 2.1">Page-title 2.1</a>
                <ul class="menu-level-2">
                    <li class="menu-item-0"><a href="?id=page2-2-1" title="Page-title 2.2.1">Page-title 2.2.1</a></li>
                    <li class="menu-item-1"><a href="?id=page2-2-2" title="Page-title 2.2.2">Page-title 2.2.2</a></li>
                    <li class="menu-item-2"><a href="?id=page2-2-3" title="Page-title 2.2.3">Page-title 2.2.3</a></li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

PHP with get_structured_menu_array(...)

Option 1: default-setup

The default-implementation (with no function-attributes) can be done like this (place this in your template):

<?php get_structured_menu_array(); ?>

The result will be a structured php array as you can see in the example below.

Array
(
    [page1] => Array
        (
            [slug] => page1
            [url] => http://localhost/getsimple/
            [parent_slug] => 
            [title] => Page-title 1
            [menu_priority] => 1
            [menu_text] => Page-title 1
            [menu_status] => Y
            [private] => 
            [pub_date] => Tue, 22 Oct 2013 08:32:48 +0200
            [children] => Array
                (
                    [page1-1] => Array
                        (
                            [slug] => page1-1
                            [url] => http://localhost/getsimple/
                            [parent_slug] => page1
                            [title] => Page-title 1.1
                            [menu_priority] => 5
                            [menu_text] => Page-title 1.1
                            [menu_status] => Y
                            [private] => 
                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                        )

                    [page1-2] => Array
                        (
                            [slug] => page1-2
                            [url] => http://localhost/getsimple/
                            [parent_slug] => page1
                            [title] => Page-title 1.2
                            [menu_priority] => 7
                            [menu_text] => Page-title 1.2
                            [menu_status] => Y
                            [private] => 
                            [pub_date] => Tue, 22 Oct 2013 08:34:56 +0200
                        )

                    [page1-3] => Array
                        (
                            [slug] => page1-3
                            [url] => http://localhost/getsimple/
                            [parent_slug] => page1
                            [title] => Page-title 1.3
                            [menu_priority] => 7
                            [menu_text] => Page-title 1.3
                            [menu_status] => Y
                            [private] => 
                            [pub_date] => Tue, 22 Oct 2013 08:35:33 +0200
                        )

                )

        )

    [page2] => Array
        (
            [slug] => page2
            [url] => http://localhost/getsimple/
            [parent_slug] => 
            [title] => Page-title 2
            [menu_priority] => 1
            [menu_text] => Page-title 2
            [menu_status] => Y
            [private] => 
            [pub_date] => Tue, 22 Oct 2013 08:32:48 +0200
            [children] => Array
                (
                    [page2-1] => Array
                        (
                            [slug] => page2-1
                            [url] => http://localhost/getsimple/
                            [parent_slug] => page2
                            [title] => Page-title 2.1
                            [menu_priority] => 5
                            [menu_text] => Page-title 2.1
                            [menu_status] => Y
                            [private] => 
                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                            [children] => Array
                                (
                                    [page2-1-1] => Array
                                        (
                                            [slug] => page2-1-1
                                            [url] => http://localhost/getsimple/
                                            [parent_slug] => page2-1
                                            [title] => Page-title 2.1.1
                                            [menu_priority] => 5
                                            [menu_text] => Page-title 2.1.1
                                            [menu_status] => Y
                                            [private] => 
                                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                                        )
                                        
                                    [page2-1-2] => Array
                                        (
                                            [slug] => page2-1-1
                                            [url] => http://localhost/getsimple/
                                            [parent_slug] => page2-1
                                            [title] => Page-title 2.1.1
                                            [menu_priority] => 5
                                            [menu_text] => Page-title 2.1.1
                                            [menu_status] => Y
                                            [private] => 
                                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                                        )
                                        
                                    [page2-1-3] => Array
                                        (
                                            [slug] => page2-1-1
                                            [url] => http://localhost/getsimple/
                                            [parent_slug] => page2-1
                                            [title] => Page-title 2.1.1
                                            [menu_priority] => 5
                                            [menu_text] => Page-title 2.1.1
                                            [menu_status] => Y
                                            [private] => 
                                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                                        )
                                        
                                )
                                
                        )

                    [page2-2] => Array
                        (
                            [slug] => page2-2
                            [url] => http://localhost/getsimple/
                            [parent_slug] => page2
                            [title] => Page-title 2.2
                            [menu_priority] => 7
                            [menu_text] => Page-title 2.2
                            [menu_status] => Y
                            [private] => 
                            [pub_date] => Tue, 22 Oct 2013 08:34:56 +0200
                        )

                )

        )

    [page3] => Array
        (
            [slug] => page3
            [url] => http://localhost/getsimple/
            [parent_slug] => 
            [title] => Page-title 3
            [menu_priority] => 1
            [menu_text] => Page-title 3
            [menu_status] => Y
            [private] => 
            [pub_date] => Tue, 22 Oct 2013 08:32:48 +0200

        )

)

Option 2: filter-setup whitout path to root

It is possible to display this part of the menu, that matches the given slug (first parameter of the function). Attention: Structured Menu works on built-in menu definition only. You can not filter for pages, that are not part of the menu.

<?php get_structured_menu_array('page2-1'); ?>

The ouput will be like the following example.

Array
(
    [page2-1] => Array
        (
            [slug] => page2-1
            [url] => http://localhost/getsimple/
            [parent_slug] => page2
            [title] => Page-title 2.1
            [menu_priority] => 5
            [menu_text] => Page-title 2.1
            [menu_status] => Y
            [private] => 
            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
            [children] => Array
                (
                    [page2-1-1] => Array
                        (
                            [slug] => page2-1-1
                            [url] => http://localhost/getsimple/
                            [parent_slug] => page2-1
                            [title] => Page-title 2.1.1
                            [menu_priority] => 5
                            [menu_text] => Page-title 2.1.1
                            [menu_status] => Y
                            [private] => 
                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                        )
                        
                    [page2-1-2] => Array
                        (
                            [slug] => page2-1-1
                            [url] => http://localhost/getsimple/
                            [parent_slug] => page2-1
                            [title] => Page-title 2.1.1
                            [menu_priority] => 5
                            [menu_text] => Page-title 2.1.1
                            [menu_status] => Y
                            [private] => 
                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                        )
                        
                    [page2-1-3] => Array
                        (
                            [slug] => page2-1-1
                            [url] => http://localhost/getsimple/
                            [parent_slug] => page2-1
                            [title] => Page-title 2.1.1
                            [menu_priority] => 5
                            [menu_text] => Page-title 2.1.1
                            [menu_status] => Y
                            [private] => 
                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                        )
                        
                )
                
        )

)

Option 3: filter-setup whit the path to root

The same filter as shown in "option 2", but incl. the path to the root-menu-item.

<?php get_structured_menu_array('page2-1', true); ?>

The ouput will be like the following example.

Array
(
    [page2] => Array
        (
            [slug] => page2
            [url] => http://localhost/getsimple/
            [parent_slug] => 
            [title] => Page-title 2
            [menu_priority] => 1
            [menu_text] => Page-title 2
            [menu_status] => Y
            [private] => 
            [pub_date] => Tue, 22 Oct 2013 08:32:48 +0200
            [children] => Array
                (
                    [page2-1] => Array
                        (
                            [slug] => page2-1
                            [url] => http://localhost/getsimple/
                            [parent_slug] => page2
                            [title] => Page-title 2.1
                            [menu_priority] => 5
                            [menu_text] => Page-title 2.1
                            [menu_status] => Y
                            [private] => 
                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                            [children] => Array
                                (
                                    [page2-1-1] => Array
                                        (
                                            [slug] => page2-1-1
                                            [url] => http://localhost/getsimple/
                                            [parent_slug] => page2-1
                                            [title] => Page-title 2.1.1
                                            [menu_priority] => 5
                                            [menu_text] => Page-title 2.1.1
                                            [menu_status] => Y
                                            [private] => 
                                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                                        )
                                        
                                    [page2-1-2] => Array
                                        (
                                            [slug] => page2-1-1
                                            [url] => http://localhost/getsimple/
                                            [parent_slug] => page2-1
                                            [title] => Page-title 2.1.1
                                            [menu_priority] => 5
                                            [menu_text] => Page-title 2.1.1
                                            [menu_status] => Y
                                            [private] => 
                                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                                        )
                                        
                                    [page2-1-3] => Array
                                        (
                                            [slug] => page2-1-1
                                            [url] => http://localhost/getsimple/
                                            [parent_slug] => page2-1
                                            [title] => Page-title 2.1.1
                                            [menu_priority] => 5
                                            [menu_text] => Page-title 2.1.1
                                            [menu_status] => Y
                                            [private] => 
                                            [pub_date] => Tue, 22 Oct 2013 08:34:07 +0200
                                        )
                                        
                                )
                                
                        )

                )
                
        )

)

You can use this plugin for free without any limitation. © 2013 http://www.hofrichter.net