| 
 Pages
        Zend_Navigation ships with two page types:
         
        MVC pages are link to on-site web pages, and are defined using MVC
        parameters ( action,  controller,
         module,  route,  params). URI
        pages are defined by a single property  uri, which give
        you the full flexibility to link off-site pages or do other things
        with the generated links (e.g. an URI that turns into
         <a href="#">foo<a>).
    
     Common page features
        All page classes must extend Zend_Navigation_Page,
        and will thus share a common set of features and properties. Most notably
        they share the options in the table below and the same initialization
        process.
     
        Option keys are mapped to setmethods. This means that
        the optionordermaps to the method  setOrder(),
        andreset_paramsmaps to the method
         setResetParams(). If there is no setter method for
        the option, it will be set as a custom property of the page. 
        Read more on extending Zend_Navigation_Page in
        Creating custom page types.
     Common page options
        
        
            
                
                    | Key | Type | Default | Description |  
                    | label | String | NULL | A page label, such as 'Home' or 'Blog'. |  
                    | id | String  | int | NULL | An id tag/attribute that may be used when rendering
                        the page, typically in an anchor element. |  
                    | class | String | NULL | A CSS class that may be used when rendering the page,
                        typically in an anchor element. |  
                    | title | String | NULL | A short page description, typically for using
                        as the titleattribute in an anchor. |  
                    | target | String | NULL | Specifies a target that may be used for the page,
                        typically in an anchor element. |  
                    | accesskey | String | NULL | This attribute assigns an access key to an Aelement.
                        An access key is a single character from the document character set. |  
                    | fragment | String | NULL | The fragment identifier (anchor identifier) pointing to 
                        an anchor within a resource that is subordinate to another, 
                        primary resource. The fragment identifier introduced by 
                        a hash mark '#'.
                        Example: http://www.example.org/foo.html#bar 
                        ('bar' is the fragment identifier) |  
                    | rel | Array | array() | Specifies forward relations for the page.
                        Each element in the array is a key-value pair, where the
                        key designates the relation/link type, and the value is
                        a pointer to the linked page. An example of a key-value
                        pair is 'alternate' => 'format/plain.html'.
                        To allow full flexbility, there are no restrictions on
                        relation values. The value does not have to be a string.
                        Read more aboutrelandrevin
                        the
                        section on the Links helper.. |  
                    | rev | Array | array() | Specifies reverse relations for the page. Works exactly
                        like rel. |  
                    | order | String  | int| NULL | NULL | Works like order for elements in
                        
                        Zend_Form. If specified,
                        the page will be iterated in a specific order, meaning
                        you can force a page to be iterated before others by
                        setting the orderattribute to a low number,
                        e.g. -100. If a  String  is given, it must
                        parse to a validint. If NULL
                        is given, it will be reset, meaning the order in which
                        the page was added to the container will be used. |  
                    | resource | String  | Zend_Acl_Resource_Interface
                        | NULL | NULL | ACL resource to associate with the page. Read more in
                        the
                        section on ACL integration in view helpers.. |  
                    | privilege | String  | NULL | NULL | ACL privilege to associate with the page. Read more in
                        the
                        section on ACL integration in view helpers.. |  
                    | active | bool | FALSE | Whether the page should be considered active for the
                        current request. If active is FALSE or not
                        given, MVC pages will check its properties against the
                        request object upon calling $page->isActive(). |  
                    | visible | bool | TRUE | Whether page should be visible for the user, or just
                        be a part of the structure. Invisible pages are skipped
                        by view helpers. |  
                    | pages | Array  | Zend_Config |
                        NULL | NULL | Child pages of the page. This could be an  Array 
                        or Zend_Config object containing either page
                        options that can be passed to the  factory()
                        method, or actual Zend_Navigation_Page
                        instances, or a mixture of both. |  Note: Custom propertiesAll pages support setting and getting of custom properties by
            use of the magic methods  __set($name, $value),
             __get($name),  __isset($name) and
             __unset($name). Custom properties may have any value,
            and will be included in the array that is returned from
 $page->toArray(), which means that pages
            can be serialized/deserialized successfully even if the pages
            contains properties that are not native in the page class.Both native and custom properties can be set using
 $page->set($name, $value)and retrieved using$page->get($name), or by using magic methods.
 Example #1 Custom page properties
            This example shows how custom properties can be used.
        span style="color: #ff0000;">'bar'// action should be taken}
Zend_Navigation_Page_Mvc
        MVC pages are defined using MVC parameters known from
        the Zend_Controller component. An MVC page will
        use Zend_Controller_Action_Helper_Url internally
        in the  getHref() method to generate hrefs, and
        the  isActive() method will intersect the
        Zend_Controller_Request_Abstract params
        with the page's params to determine if the page is active.
     MVC page options
        
        
            
                
                    | Key | Type | Default | Description |  
                    | action | String | NULL | Action name to use when generating href to the page. |  
                    | controller | String | NULL | Controller name to use when generating href to the page. |  
                    | module | String | NULL | Module name to use when generating href to the page. |  
                    | params | Array | array() | User params to use when generating href to the page. |  
                    | route | String | NULL | Route name to use when generating href to the page. |  
                    | reset_params | bool | TRUE | Whether user params should be reset when generating href to the page. |  
                    | encode_url | bool | TRUE | Whether href should be encoded when assembling URL. |  Note: 
        
            The three examples below assume a default MVC setup with
            the defaultroute in place.The URI returned is relative to the
 baseUrlin
            Zend_Controller_Front. In the examples, the baseUrl
            is '/' for simplicity.
 Example #2 getHref() generates the page URI
            This example shows that MVC pages use
            Zend_Controller_Action_Helper_Url internally
            to generate URIs when calling $page->getHref().// getHref() returns /'action'     => 'index',    'controller' => 'index')); // getHref() returns /blog/post/view'action'     => 'view',    'controller' => 'post',    'module'     => 'blog')); // getHref() returns /blog/post/view/id/1337'action'     => 'view',    'controller' => 'post',    'module'     => 'blog',    'params''id' => 1337)));
Example #3 isActive() determines if page is active
            This example shows that MVC pages determine whether they are active
            by using the params found in the request object.
        /* * Dispatched request: * - module:     default * - controller: index * - action:     index */'action'     => 'index',    'controller' => 'index''action'     => 'bar',    'controller' => 'index')); $page1->isActive(); // returns true$page2->isActive(); // returns false /* * Dispatched request: * - module:     blog * - controller: post * - action:     view * - id:         1337 */'action'     => 'view',    'controller' => 'post',    'module'     => 'blog')); // returns true, because request has the same module, controller and action$page->isActive(); /* * Dispatched request: * - module:     blog * - controller: post * - action:     view */'action'     => 'view',    'controller' => 'post',    'module'     => 'blog',    'params''id'// returns false, because page requires the id param to be set in the request$page->isActive(); // returns false
        
        
            Routes can be used with MVC pages. If a page has a route, this
            route will be used in  getHref() to generate the
            URL for the page.
        
             Note: 
                
                    Note that when using the routeproperty in a
                    page, you should also specify the default params that the
                    route defines (module, controller, action, etc.), otherwise
                    the  isActive() method will not be able to
                    determine if the page is active. The reason for this is that
                    there is currently no way to get the default params from a
                    Zend_Controller_Router_Route_Interface object,
                    nor to retrieve the current route from a
                    Zend_Controller_Router_Interface object.
// the following route is added to the ZF router'article_view', // route name'a/:id''module'     => 'news',            'controller' => 'article',            'action'     => 'view',            'id'// a page is created with a 'route' option'label'      => 'A news article',    'route'      => 'article_view',    'module'     => 'news',    // required for isActive(), see note above    'controller' => 'article', // required for isActive(), see note above    'action'     => 'view',    // required for isActive(), see note above    'params''id' => 42))); // returns: /a/42$page->getHref();
 Example #5 Set parameters to use when assembling URL// The following route is added to the ZF router'article_list', // route name'blog/:category/:page''module'     => 'blog',            'controller' => 'article',            'action'     => 'list',            'category''page'// A page is created with the 'route' option'label'      => 'Article list',    'module'     => 'blog',    'controller' => 'post',    'action'     => 'list',)); // Add multiple parameters at once'category' => 'news',        'page'     => 1,    )); // Add a single parameter$page->addParam('category', 'news'); // Set multiple parameters at once (Overwrites any previously set parameters!)'category' => 'news',        'page'     => 1,    )); // Set a single parameter$page->setParam('category', 'news'); // Retrieve all parameters$params = $page->getParams(); // Retrieve a single parameter$category = $page->getParam('category'); // Remove a parameter$page->removeParam('page'); // Clear all parameters$page->clearParams();
Zend_Navigation_Page_Uri
        Pages of type Zend_Navigation_Page_Uri can be
        used to link to pages on other domains or sites, or to implement
        custom logic for the page. URI pages are simple; in addition
        to the common page options, a URI page takes only one option —
        uri. Theuriwill be returned when
        calling$page->getHref(), and may be a
         String  or NULL. Note: 
        
            Zend_Navigation_Page_Uri will not try to determine
            whether it should be active when calling $page->isActive().
            It merely returns what currently is set, so to make a URI page active
            you have to manually call$page->setActive()or
            specifyingactiveas a page option when constructing.
 URI page options
        
        
            
                
                    | Key | Type | Default | Description |  
                    | uri | String | NULL | URI to page. This can be any string or
                        NULL. | Creating custom page types
        When extending Zend_Navigation_Page, there is
        usually no need to override the constructor or the methods
         setOptions() or  setConfig(). The page
        constructor takes a single parameter, an  Array  or a
        Zend_Config object, which is passed to
         setOptions() or  setConfig() respectively.
        Those methods will in turn call  set() method, which
        will map options to native or custom properties. If the option
        internal_id is given, the method will first look for a
        method named  setInternalId(), and pass the option to this
        method if it exists. If the method does not exist, the option will be
        set as a custom property of the page, and be accessible via
        $internalId = $page->internal_id; or
        $internalId = $page->get('internal_id');.
     Example #6 The most simple custom page
            The only thing a custom page class needs to implement is the
             getHref() method.
        span style="color: #ff0000;">'something-completely-different';    }}
Example #7 A custom page with properties
            When adding properties to an extended page, there is no need
            to override/modify  setOptions() or
             setConfig().
        span style="color: #ff0000;">'/' . $this->fooBar;    }} // can now construct using'label'   => 'Property names are mapped to setters',    'foo'     => 'bar',    'foo_bar' => 'baz')); // ...or'type'    => 'My_Navigation_Page',    'label'   => 'Property names are mapped to setters',    'foo'     => 'bar',    'foo_bar' => 'baz'));
Creating pages using the page factory
        All pages (also custom classes), can be created using the page
        factory,  Zend_Navigation_Page::factory(). The factory
        can take an array with options, or a
        Zend_Config object. Each key in the
        array/config corresponds to a page option, as seen in the
        section on Pages.
        If the option uriis given and no MVC options are
        given (action, controller, module, route), an URI
        page will be created. If any of the MVC options are given, an
        MVC page will be created. 
        If typeis given, the factory will assume the value to
        be the name of the class that should be created. If the value ismvcoruriand MVC/URI page will be created. Example #8 Creating an MVC page using the page factoryspan style="color: #ff0000;">'label'  => 'My MVC page',    'action' => 'index''label'      => 'Search blog',    'action'     => 'index',    'controller' => 'search',    'module'     => 'blog''label'      => 'Home',    'action'     => 'index',    'controller' => 'index',    'module'     => 'index',    'route'      => 'home''type'   => 'mvc',    'label'  => 'My MVC page'));
Example #9 Creating a URI page using the page factoryspan style="color: #ff0000;">'label' => 'My URI page',    'uri'   => 'http://www.example.com/''label'  => 'Search',    'uri'    => 'http://www.example.com/search',    'active''label' => 'My URI page',    'uri'   => '#''type'   => 'uri',    'label'  => 'My URI page'));
Example #10 Creating a custom page type using the page factory
            To create a custom page type using the factory, use the option
            typeto specify a class name to instantiate.span style="color: #ff0000;">'ok''type'    => 'My_Navigation_Page',    'label'   => 'My custom page',    'foo_bar' => 'foo bar'));
 |  |