PEAR Manual
Prev |  | Next

# Introduction

Introduction -- Menu structure and supported output modes

## Menu hash structure

The menu structure is defined by a multidimensional hash. This makes it quite easy to generate and traverse:

Example 41-1. Menu multidimensional hash
    array(
        1 => array(
            'title' => 'Menu item 1',
            'url' => '/item1.php',
            'sub' => array(
                11 => array('title' => 'Menu item 1.1', 'url' => '/item1.1.php'),
                12 => array(
                    'title' => 'Menu item 1.2',
                    'url' => '/item1.2.php',
                    'sub' => array(
                        121 => array('title' => 'Menu item 1.2.1', 'url' => '/item1.2.1.php'),
                        122 => array('title' => 'Menu item 1.2.2', 'url' => '/item1.2.2.php')
                    )
                )
            )
        ),
        2 => array(
            'title' => 'Menu item 2',
            'url' => '/item2.php',
            'sub' => array(
                21 => array('title' => 'Menu item 2.1', 'url' => '/item2.1.php'),
                22 => array('title' => 'Menu item 2.2', 'url' => '/item2.2.php')
            )
        )
    );

Each entry should have at least `'url'` and `'title'` keys and may also have `'sub'` key containing the children of this entry. Note that keys in the entry arrays serve as node identifiers and should be unique.

The menu entries can also contain custom keys. If such keys are present, then they will be used by renderers in creating the output (this usually means that the content of such a key will be assigned to the template placeholder with the same name).

## Supported output modes

HTML_Menu supports five output modes: `'tree'` (default), `'rows'`, `'urhere'`, `'prevnext'` and `'sitemap'`. Lets use the array defined above as menu structure assuming that element `'Menu item 1.2'` is currently active and try each menu type.

Possible menu types

`'tree'`

  This type of the menu mostly follows the internal structure of the menu hash. Different levels of the menu are marked by indentation, only the elements leading to the active item or immediately following it are shown.

  Example 41-2. Output for menu type 'tree'
      Menu item 1
          Menu item 1.1
          Menu item 1.2
              Menu item 1.2.1
              Menu item 1.2.2
      Menu item 2

`'rows'`

  This is quite similar to `'tree'` type, only different levels are not marked by indentation, but are shown on different rows of the menu.

  Example 41-3. Output for menu type 'rows'
      Menu item 1  Menu item 2
      Menu item 1.1  Menu item 1.2
      Menu item 1.2.1  Menu item 1.2.2

`'urhere'`

  This is so-called 'breadcrumb' navigation, allowing to easily understand your position within site hierarchy.

  Example 41-4. Output for menu type 'urhere'
      Menu item 1 >> Menu item 1.2

`'prevnext'`

  This is the menu often used in documentation (including the PEAR manual), the links lead to previous, next and parent entries of the current entry.

  Example 41-5. Output for menu type 'prevnext'
      << Menu item 1.1  ^ Menu item 1 ^  Menu item 1.2.1 >>

`'sitemap'`

  This is `'tree'` type menu, but with all entries shown.

  Example 41-6. Output for menu type 'sitemap'
      Menu item 1
          Menu item 1.1
          Menu item 1.2
              Menu item 1.2.1
              Menu item 1.2.2
      Menu item 2
          Menu item 2.1
          Menu item 2.2

## Usage example

Example 41-7. Very basic usage example
    // Load the class
    require_once 'HTML/Menu.php';

    // Instantiate the menu object, we presume that $data contains menu structure
    $menu =& new HTML_Menu($data, 'tree');

    // Output the menu
    $menu->show();

Prev | Home | Next
HTML_Menu | Up | constructor HTML_Menu::HTML_Menu()