Navigation Usability

  Home arrow Navigation Usability arrow Page 7 - Advanced Bulleted-List Menu
NAVIGATION USABILITY

Advanced Bulleted-List Menu
By: notepad
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 5 stars5 stars5 stars5 stars5 stars / 3
    2005-05-06

    Table of Contents:
  • Advanced Bulleted-List Menu
  • Menu Layout
  • Preserving State Without Cookies
  • Adding CSS
  • Adding JavaScript
  • Drawing Our Menu
  • Conclusion

  •  
     

    SEARCH CODEWALKERS

    TOOLS YOU CAN USE

    advertisement

    Advanced Bulleted-List Menu - Conclusion


    (Page 7 of 7 )

    Booya; nice looking portable menus with very little setup effort. The final code should be assembled as seen below, just include it in your template, change the styles to match your site, and you're all set.

    <html>
    <head>
    <title>advanced bulleted-list menu</title>
    <link rel="stylesheet" title="default" href="style.css" />
    <script type="text/javascript">
    <!--
    function toggle(id) {
      if(document.getElementById) {
        var el = document.getElementById(id);
        el.style.display = (el.style.display == 'none') ? 'block' : 'none';
      }
    }
    //-->
    </script>
    </head>
    <body>

    <?php

    // menu title => menu target
    $menu = array('Menu One'=>array('Page One'=>'blist_menu.php?pg=1',
                      'Page Two'=>'blist_menu.php?pg=2'),
                  'Menu Two'=>array('Page Three'=>'blist_menu.php?pg=3',
                      'Page Four'=>'blist_menu.php?pg=4'),
                  'Menu Three'=>array('Page Five'=>'blist_menu.php?pg=5',
                      'Menu Four'=>array('Page Six'=>'blist_menu.php?pg=6',
                          'Page Seven'=>'blist_menu.php?pg=7')));

    // alternative method to using cookies
    function array_search_recursive($needle, $haystack) {
        $pos = null;
        $keys = array_keys($haystack);
        while(!$pos && (list($garbage, $value)=each($keys))) {
            if(is_scalar($haystack[$value])) {
                if($haystack[$value] === $needle)
                    $pos[] = $value;
            } elseif(is_array($haystack[$value])) {
                if($pos = array_search_recursive($needle, $haystack[$value]))
                    array_unshift($pos, $value);
            }
        }
        return $pos;
    }

    // recursive function to draw menu
    function draw_menu($menu, $preserve, &$id) {
        if($id == 0)
            echo "<div id=\"$id\">\r\n<ul>\r\n";
        else
            echo "<div id=\"$id\" style=\"display:none;\">\r\n<ul>\r\n";
        $id += 1;

        foreach($menu as $key=>$value) {
            if(is_array($value)) {
                if(@in_array($key, $preserve))
                    $toggle = $id;
                echo "<li><a href=\"#\" onclick=\"toggle($id);\">$key</a></li>\r\n";
                draw_menu($value, $preserve, $id);
            }
            else {
                echo "<li class=\"file\">";
                if(@in_array($key, $preserve))
                    echo "<a class=\"live\" href=\"$value\">$key</a>";
                else
                    echo "<a href=\"$value\">$key</a>";
                echo "</li>\r\n";
            }
        }
        echo "</ul>\r\n</div>\r\n";
        if(isset($toggle))
            echo "<script language=\"javascript\">toggle($toggle);</script>\r\n";
    }

    $id = 0;
    $base = basename($_SERVER['PHP_SELF']);
    $self = isset($_SERVER['QUERY_STRING']) ? $base.'?'.$_SERVER['QUERY_STRING'] : $base;
    $preserve = array_search_recursive($self, $menu);
    draw_menu($menu, $preserve, $id);

    ?>

    </body>
    </html>

    About the Author

    Hi, I'm notepad.


    DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware.
    blog comments powered by Disqus

    NAVIGATION USABILITY ARTICLES

    - Advanced Bulleted-List Menu
    - Using Multiple Pages for Navigation


    © 2003-2012 by Developer Shed. All rights reserved. DS Cluster 1 - Follow our Sitemap