Pages

Containers

Containers have methods for adding, retrieving, deleting and iterating pages. Containers implement the » SPL interfaces RecursiveIterator and Countable, meaning that a container can be iterated using the SPL RecursiveIteratorIterator class.

Creating containers

Zend_Navigation_Container is abstract, and can not be instantiated directly. Use Zend_Navigation if you want to instantiate a container.

Zend_Navigation can be constructed entirely empty, or take an array or a Zend_Config object with pages to put in the container. Each page in the given array/config will eventually be passed to the addPage() method of the container class, which means that each element in the array/config can be an array or a config object, or a Zend_Navigation_Page instance.

Example #1 Creating a container using an array

  1. /*
  2. * Create a container from an array
  3. *
  4. * Each element in the array will be passed to
  5. * Zend_Navigation_Page::factory() when constructing.
  6. */'label' => 'Page 1',
  7.         'id' => 'home-link',
  8.         'uri' => '/''label' => 'Zend',
  9.         'uri' => 'http://www.zend-project.com/',
  10.         'order''label' => 'Page 2',
  11.         'controller' => 'page2',
  12.         'pages''label' => 'Page 2.1',
  13.                 'action' => 'page2_1',
  14.                 'controller' => 'page2',
  15.                 'class' => 'special-one',
  16.                 'title' => 'This element has a special class',
  17.                 'active''label' => 'Page 2.2',
  18.                 'action' => 'page2_2',
  19.                 'controller' => 'page2',
  20.                 'class' => 'special-two',
  21.                 'title' => 'This element has a special class too''label' => 'Page 2 with params',
  22.         'action' => 'index',
  23.         'controller' => 'page2',
  24.         // specify a param or two
  25.         'params''format' => 'json',
  26.             'foo' => 'bar''label' => 'Page 2 with params and a route',
  27.         'action' => 'index',
  28.         'controller' => 'page2',
  29.         // specify a route name and a param for the route
  30.         'route' => 'nav-route-example',
  31.         'params''format' => 'json''label' => 'Page 3',
  32.         'action' => 'index',
  33.         'controller' => 'index',
  34.         'module' => 'mymodule',
  35.         'reset_params''label' => 'Page 4',
  36.         'uri' => '#',
  37.         'pages''label' => 'Page 4.1',
  38.                 'uri' => '/page4',
  39.                 'title' => 'Page 4 using uri',
  40.                 'pages''label' => 'Page 4.1.1',
  41.                         'title' => 'Page 4 using mvc params',
  42.                         'action' => 'index',
  43.                         'controller' => 'page4',
  44.                         // let's say this page is active
  45.                         'active' => '1''label' => 'Page 0?',
  46.         'uri' => '/setting/the/order/option',
  47.         // setting order to -1 should make it appear first
  48.         'order''label' => 'Page 5',
  49.         'uri' => '/',
  50.         // this page should not be visible
  51.         'visible''pages''label' => 'Page 5.1',
  52.                 'uri' => '#',
  53.                 'pages''label' => 'Page 5.1.1',
  54.                         'uri' => '#',
  55.                         'pages''label' => 'Page 5.1.2',
  56.                                 'uri' => '#',
  57.                                 // let's say this page is active
  58.                                 'active''label' => 'ACL page 1 (guest)',
  59.         'uri' => '#acl-guest',
  60.         'resource' => 'nav-guest',
  61.         'pages''label' => 'ACL page 1.1 (foo)',
  62.                 'uri' => '#acl-foo',
  63.                 'resource' => 'nav-foo''label' => 'ACL page 1.2 (bar)',
  64.                 'uri' => '#acl-bar',
  65.                 'resource' => 'nav-bar''label' => 'ACL page 1.3 (baz)',
  66.                 'uri' => '#acl-baz',
  67.                 'resource' => 'nav-baz''label' => 'ACL page 1.4 (bat)',
  68.                 'uri' => '#acl-bat',
  69.                 'resource' => 'nav-bat''label' => 'ACL page 2 (member)',
  70.         'uri' => '#acl-member',
  71.         'resource' => 'nav-member''label' => 'ACL page 3 (admin',
  72.         'uri' => '#acl-admin',
  73.         'resource' => 'nav-admin',
  74.         'pages''label' => 'ACL page 3.1 (nothing)',
  75.                 'uri' => '#acl-nada''label' => 'Zend Framework',
  76.         'route' => 'zf-route'
  77.     )
  78. ));

Example #2 Creating a container using a config object

Example for INI:

  1. [nav]
  2. zend.label = "Zend"
  3. zend.uri = "http://www.zend-project.com/"
  4. zend.order = "100"
  5.  
  6. page1.label = "Page 1"
  7. page1.uri = "page1"
  8. page1.pages.page1_1.label = "Page 1.1"
  9. page1.pages.page1_1.uri = "page1/page1_1"
  10.  
  11. page2.label = "Page 2"
  12. page2.uri = "page2"
  13. page2.pages.page2_1.label = "Page 2.1"
  14. page2.pages.page2_1.uri = "page2/page2_1"
  15. page2.pages.page2_2.label = "Page 2.2"
  16. page2.pages.page2_2.uri = "page2/page2_2"
  17. page2.pages.page2_2.pages.page2_2_1.label = "Page 2.2.1"
  18. page2.pages.page2_2.pages.page2_2_1.uri = "page2/page2_2/page2_2_1"
  19. page2.pages.page2_2.pages.page2_2_2.label = "Page 2.2.2"
  20. page2.pages.page2_2.pages.page2_2_2.uri = "page2/page2_2/page2_2_2"
  21. page2.pages.page2_2.pages.page2_2_2.active = "1"
  22. page2.pages.page2_3.label = "Page 2.3"
  23. page2.pages.page2_3.uri = "page2/page2_3"
  24. page2.pages.page2_3.pages.page2_3_1.label = "Page 2.3.1"
  25. page2.pages.page2_3.pages.page2_3_1.uri = "page2/page2_3/page2_3_1"
  26. page2.pages.page2_3.pages.page2_3_2.label = "Page 2.3.2"
  27. page2.pages.page2_3.pages.page2_3_2.uri = "page2/page2_3/page2_3_2"
  28. page2.pages.page2_3.pages.page2_3_2.visible = "0"
  29. page2.pages.page2_3.pages.page2_3_2.pages.page2_3_2_1.label = "Page 2.3.2.1"
  30. page2.pages.page2_3.pages.page2_3_2.pages.page2_3_2_1.uri = "page2/page2_3/page2_3_2/1"
  31. page2.pages.page2_3.pages.page2_3_2.pages.page2_3_2_1.active = "1"
  32. page2.pages.page2_3.pages.page2_3_2.pages.page2_3_2_2.label = "Page 2.3.2.2"
  33. page2.pages.page2_3.pages.page2_3_2.pages.page2_3_2_2.uri = "page2/page2_3/page2_3_2/2"
  34. page2.pages.page2_3.pages.page2_3_2.pages.page2_3_2_2.active = "1"
  35. page2.pages.page2_3.pages.page2_3_2.pages.page2_3_2_2.pages.page_2_3_2_2_1.label = "Ignore"
  36. page2.pages.page2_3.pages.page2_3_2.pages.page2_3_2_2.pages.page_2_3_2_2_1.uri = "#"
  37. page2.pages.page2_3.pages.page2_3_2.pages.page2_3_2_2.pages.page_2_3_2_2_1.active = "1"
  38. page2.pages.page2_3.pages.page2_3_3.label = "Page 2.3.3"
  39. page2.pages.page2_3.pages.page2_3_3.uri = "page2/page2_3/page2_3_3"
  40. page2.pages.page2_3.pages.page2_3_3.resource = "admin"
  41. page2.pages.page2_3.pages.page2_3_3.pages.page2_3_3_1.label = "Page 2.3.3.1"
  42. page2.pages.page2_3.pages.page2_3_3.pages.page2_3_3_1.uri = "page2/page2_3/page2_3_3/1"
  43. page2.pages.page2_3.pages.page2_3_3.pages.page2_3_3_1.active = "1"
  44. page2.pages.page2_3.pages.page2_3_3.pages.page2_3_3_2.label = "Page 2.3.3.2"
  45. page2.pages.page2_3.pages.page2_3_3.pages.page2_3_3_2.uri = "page2/page2_3/page2_3_3/2"
  46. page2.pages.page2_3.pages.page2_3_3.pages.page2_3_3_2.resource = "guest"
  47. page2.pages.page2_3.pages.page2_3_3.pages.page2_3_3_2.active = "1"
  48.  
  49. page3.label = "Page 3"
  50. page3.uri = "page3"
  51. page3.pages.page3_1.label = "Page 3.1"
  52. page3.pages.page3_1.uri = "page3/page3_1"
  53. page3.pages.page3_1.resource = "guest"
  54. page3.pages.page3_2.label = "Page 3.2"
  55. page3.pages.page3_2.uri = "page3/page3_2"
  56. page3.pages.page3_2.resource = "member"
  57. page3.pages.page3_2.pages.page3_2_1.label = "Page 3.2.1"
  58. page3.pages.page3_2.pages.page3_2_1.uri = "page3/page3_2/page3_2_1"
  59. page3.pages.page3_2.pages.page3_2_2.label = "Page 3.2.2"
  60. page3.pages.page3_2.pages.page3_2_2.uri = "page3/page3_2/page3_2_2"
  61. page3.pages.page3_2.pages.page3_2_2.resource = "admin"
  62. page3.pages.page3_3.label = "Page 3.3"
  63. page3.pages.page3_3.uri = "page3/page3_3"
  64. page3.pages.page3_3.resource = "special"
  65. page3.pages.page3_3.pages.page3_3_1.label = "Page 3.3.1"
  66. page3.pages.page3_3.pages.page3_3_1.uri = "page3/page3_3/page3_3_1"
  67. page3.pages.page3_3.pages.page3_3_1.visible = "0"
  68. page3.pages.page3_3.pages.page3_3_2.label = "Page 3.3.2"
  69. page3.pages.page3_3.pages.page3_3_2.uri = "page3/page3_3/page3_3_2"
  70. page3.pages.page3_3.pages.page3_3_2.resource = "admin"
  71.  
  72. home.label = "Home"
  73. home.order = "-100"
  74. home.module = "default"
  75. home.controller = "index"
  76. home.action = "index"
  1. span style="color: #ff0000;">'/path/to/navigation.ini', 'nav'

Example for JSON:

  1. {
  2.   "nav": {
  3.     "zend": {
  4.       "label": "Zend",
  5.       "uri": "http:\/\/www.zend-project.com\/",
  6.       "order": "100"
  7.     },
  8.     "page1": {
  9.       "label": "Page 1",
  10.       "uri": "page1",
  11.       "pages": {
  12.         "page1_1": {
  13.           "label": "Page 1.1",
  14.           "uri": "page1\/page1_1"
  15.         }
  16.       }
  17.     },
  18.     "page2": {
  19.       "label": "Page 2",
  20.       "uri": "page2",
  21.       "pages": {
  22.         "page2_1": {
  23.           "label": "Page 2.1",
  24.           "uri": "page2\/page2_1"
  25.         },
  26.         "page2_2": {
  27.           "label": "Page 2.2",
  28.           "uri": "page2\/page2_2",
  29.           "pages": {
  30.             "page2_2_1": {
  31.               "label": "Page 2.2.1",
  32.               "uri": "page2\/page2_2\/page2_2_1"
  33.             },
  34.             "page2_2_2": {
  35.               "label": "Page 2.2.2",
  36.               "uri": "page2\/page2_2\/page2_2_2",
  37.               "active": "1"
  38.             }
  39.           }
  40.         },
  41.         "page2_3": {
  42.           "label": "Page 2.3",
  43.           "uri": "page2\/page2_3",
  44.           "pages": {
  45.             "page2_3_1": {
  46.               "label": "Page 2.3.1",
  47.               "uri": "page2\/page2_3\/page2_3_1"
  48.             },
  49.             "page2_3_2": {
  50.               "label": "Page 2.3.2",
  51.               "uri": "page2\/page2_3\/page2_3_2",
  52.               "visible": "0",
  53.               "pages": {
  54.                 "page2_3_2_1": {
  55.                   "label": "Page 2.3.2.1",
  56.                   "uri": "page2\/page2_3\/page2_3_2\/1",
  57.                   "active": "1"
  58.                 },
  59.                 "page2_3_2_2": {
  60.                   "label": "Page 2.3.2.2",
  61.                   "uri": "page2\/page2_3\/page2_3_2\/2",
  62.                   "active": "1",
  63.                   "pages": {
  64.                     "page_2_3_2_2_1": {
  65.                       "label": "Ignore",
  66.                       "uri": "#",
  67.                       "active": "1"
  68.                     }
  69.                   }
  70.                 }
  71.               }
  72.             },
  73.             "page2_3_3": {
  74.               "label": "Page 2.3.3",
  75.               "uri": "page2\/page2_3\/page2_3_3",
  76.               "resource": "admin",
  77.               "pages": {
  78.                 "page2_3_3_1": {
  79.                   "label": "Page 2.3.3.1",
  80.                   "uri": "page2\/page2_3\/page2_3_3\/1",
  81.                   "active": "1"
  82.                 },
  83.                 "page2_3_3_2": {
  84.                   "label": "Page 2.3.3.2",
  85.                   "uri": "page2\/page2_3\/page2_3_3\/2",
  86.                   "resource": "guest",
  87.                   "active": "1"
  88.                 }
  89.               }
  90.             }
  91.           }
  92.         }
  93.       }
  94.     },
  95.     "page3": {
  96.       "label": "Page 3",
  97.       "uri": "page3",
  98.       "pages": {
  99.         "page3_1": {
  100.           "label": "Page 3.1",
  101.           "uri": "page3\/page3_1",
  102.           "resource": "guest"
  103.         },
  104.         "page3_2": {
  105.           "label": "Page 3.2",
  106.           "uri": "page3\/page3_2",
  107.           "resource": "member",
  108.           "pages": {
  109.             "page3_2_1": {
  110.               "label": "Page 3.2.1",
  111.               "uri": "page3\/page3_2\/page3_2_1"
  112.             },
  113.             "page3_2_2": {
  114.               "label": "Page 3.2.2",
  115.               "uri": "page3\/page3_2\/page3_2_2",
  116.               "resource": "admin"
  117.             }
  118.           }
  119.         },
  120.         "page3_3": {
  121.           "label": "Page 3.3",
  122.           "uri": "page3\/page3_3",
  123.           "resource": "special",
  124.           "pages": {
  125.             "page3_3_1": {
  126.               "label": "Page 3.3.1",
  127.               "uri": "page3\/page3_3\/page3_3_1",
  128.               "visible": "0"
  129.             },
  130.             "page3_3_2": {
  131.               "label": "Page 3.3.2",
  132.               "uri": "page3\/page3_3\/page3_3_2",
  133.               "resource": "admin"
  134.             }
  135.           }
  136.         }
  137.       }
  138.     },
  139.     "home": {
  140.       "label": "Home",
  141.       "order": "-100",
  142.       "module": "default",
  143.       "controller": "index",
  144.       "action": "index"
  145.     }
  146.   }
  147. }
  1. span style="color: #ff0000;">'/path/to/navigation.json', 'nav'

Example for XML:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <config>
  3.     <nav>
  4.  
  5.         <zend>
  6.             <label>Zend</label>
  7.             <uri>http://www.zend-project.com/</uri>
  8.             <order>100</order>
  9.         </zend>
  10.  
  11.         <page1>
  12.             <label>Page 1</label>
  13.             <uri>page1</uri>
  14.             <pages>
  15.  
  16.                 <page1_1>
  17.                     <label>Page 1.1</label>
  18.                     <uri>page1/page1_1</uri>
  19.                 </page1_1>
  20.  
  21.             </pages>
  22.         </page1>
  23.  
  24.         <page2>
  25.             <label>Page 2</label>
  26.             <uri>page2</uri>
  27.             <pages>
  28.  
  29.                 <page2_1>
  30.                     <label>Page 2.1</label>
  31.                     <uri>page2/page2_1</uri>
  32.                 </page2_1>
  33.  
  34.                 <page2_2>
  35.                     <label>Page 2.2</label>
  36.                     <uri>page2/page2_2</uri>
  37.                     <pages>
  38.  
  39.                         <page2_2_1>
  40.                             <label>Page 2.2.1</label>
  41.                             <uri>page2/page2_2/page2_2_1</uri>
  42.                         </page2_2_1>
  43.  
  44.                         <page2_2_2>
  45.                             <label>Page 2.2.2</label>
  46.                             <uri>page2/page2_2/page2_2_2</uri>
  47.                             <active>1</active>
  48.                         </page2_2_2>
  49.  
  50.                     </pages>
  51.                 </page2_2>
  52.  
  53.                 <page2_3>
  54.                     <label>Page 2.3</label>
  55.                     <uri>page2/page2_3</uri>
  56.                     <pages>
  57.  
  58.                         <page2_3_1>
  59.                             <label>Page 2.3.1</label>
  60.                             <uri>page2/page2_3/page2_3_1</uri>
  61.                         </page2_3_1>
  62.  
  63.                         <page2_3_2>
  64.                             <label>Page 2.3.2</label>
  65.                             <uri>page2/page2_3/page2_3_2</uri>
  66.                             <visible>0</visible>
  67.                             <pages>
  68.  
  69.                                     <page2_3_2_1>
  70.                                         <label>Page 2.3.2.1</label>
  71.                                         <uri>page2/page2_3/page2_3_2/1</uri>
  72.                                         <active>1</active>
  73.                                     </page2_3_2_1>
  74.  
  75.                                     <page2_3_2_2>
  76.                                         <label>Page 2.3.2.2</label>
  77.                                         <uri>page2/page2_3/page2_3_2/2</uri>
  78.                                         <active>1</active>
  79.  
  80.                                         <pages>
  81.                                             <page_2_3_2_2_1>
  82.                                                 <label>Ignore</label>
  83.                                                 <uri>#</uri>
  84.                                                 <active>1</active>
  85.                                             </page_2_3_2_2_1>
  86.                                         </pages>
  87.                                     </page2_3_2_2>
  88.  
  89.                             </pages>
  90.                         </page2_3_2>
  91.  
  92.                         <page2_3_3>
  93.                             <label>Page 2.3.3</label>
  94.                             <uri>page2/page2_3/page2_3_3</uri>
  95.                             <resource>admin</resource>
  96.                             <pages>
  97.  
  98.                                     <page2_3_3_1>
  99.                                         <label>Page 2.3.3.1</label>
  100.                                         <uri>page2/page2_3/page2_3_3/1</uri>
  101.                                         <active>1</active>
  102.                                     </page2_3_3_1>
  103.  
  104.                                     <page2_3_3_2>
  105.                                         <label>Page 2.3.3.2</label>
  106.                                         <uri>page2/page2_3/page2_3_3/2</uri>
  107.                                         <resource>guest</resource>
  108.                                         <active>1</active>
  109.                                     </page2_3_3_2>
  110.  
  111.                             </pages>
  112.                         </page2_3_3>
  113.  
  114.                     </pages>
  115.                 </page2_3>
  116.  
  117.             </pages>
  118.         </page2>
  119.  
  120.         <page3>
  121.             <label>Page 3</label>
  122.             <uri>page3</uri>
  123.             <pages>
  124.  
  125.                 <page3_1>
  126.                     <label>Page 3.1</label>
  127.                     <uri>page3/page3_1</uri>
  128.                     <resource>guest</resource>
  129.                 </page3_1>
  130.  
  131.                 <page3_2>
  132.                     <label>Page 3.2</label>
  133.                     <uri>page3/page3_2</uri>
  134.                     <resource>member</resource>
  135.                     <pages>
  136.  
  137.                         <page3_2_1>
  138.                             <label>Page 3.2.1</label>
  139.                             <uri>page3/page3_2/page3_2_1</uri>
  140.                         </page3_2_1>
  141.  
  142.                         <page3_2_2>
  143.                             <label>Page 3.2.2</label>
  144.                             <uri>page3/page3_2/page3_2_2</uri>
  145.                             <resource>admin</resource>
  146.                         </page3_2_2>
  147.  
  148.                     </pages>
  149.                 </page3_2>
  150.  
  151.                 <page3_3>
  152.                     <label>Page 3.3</label>
  153.                     <uri>page3/page3_3</uri>
  154.                     <resource>special</resource>
  155.                     <pages>
  156.  
  157.                         <page3_3_1>
  158.                             <label>Page 3.3.1</label>
  159.                             <uri>page3/page3_3/page3_3_1</uri>
  160.                             <visible>0</visible>
  161.                         </page3_3_1>
  162.  
  163.                         <page3_3_2>
  164.                             <label>Page 3.3.2</label>
  165.                             <uri>page3/page3_3/page3_3_2</uri>
  166.                             <resource>admin</resource>
  167.                         </page3_3_2>
  168.  
  169.                     </pages>
  170.                 </page3_3>
  171.  
  172.             </pages>
  173.         </page3>
  174.  
  175.         <home>
  176.             <label>Home</label>
  177.             <order>-100</order>
  178.             <module>default</module>
  179.             <controller>index</controller>
  180.             <action>index</action>
  181.         </home>
  182.  
  183.     </nav>
  184. </config>
  1. span style="color: #ff0000;">'/path/to/navigation.xml', 'nav'

Example for YAML:

  1. nav:
  2.   zend:
  3.     label: Zend
  4.     uri: http://www.zend-project.com/
  5.     order: 100
  6.   page1:
  7.     label: Page 1
  8.     uri: page1
  9.     pages:
  10.       page1_1:
  11.         label: Page 1.1
  12.         uri: page1/page1_1
  13.   page2:
  14.     label: Page 2
  15.     uri: page2
  16.     pages:
  17.       page2_1:
  18.         label: Page 2.1
  19.         uri: page2/page2_1
  20.       page2_2:
  21.         label: Page 2.2
  22.         uri: page2/page2_2
  23.         pages:
  24.           page2_2_1:
  25.             label: Page 2.2.1
  26.             uri: page2/page2_2/page2_2_1
  27.           page2_2_2:
  28.             label: Page 2.2.2
  29.             uri: page2/page2_2/page2_2_2
  30.             active: 1
  31.       page2_3:
  32.         label: Page 2.3
  33.         uri: page2/page2_3
  34.         pages:
  35.           page2_3_1:
  36.             label: Page 2.3.1
  37.             uri: page2/page2_3/page2_3_1
  38.           page2_3_2:
  39.             label: Page 2.3.2
  40.             uri: page2/page2_3/page2_3_2
  41.             visible: 0
  42.             pages:
  43.               page2_3_2_1:
  44.                 label: Page 2.3.2.1
  45.                 uri: page2/page2_3/page2_3_2/1
  46.                 active: 1
  47.               page2_3_2_2:
  48.                 label: Page 2.3.2.2
  49.                 uri: page2/page2_3/page2_3_2/2
  50.                 active: 1
  51.                 pages:
  52.                   page_2_3_2_2_1:
  53.                     label: Ignore
  54.                     uri: #
  55.                     active: 1
  56.           page2_3_3:
  57.             label: Page 2.3.3
  58.             uri: page2/page2_3/page2_3_3
  59.             resource: admin
  60.             pages:
  61.               page2_3_3_1:
  62.                 label: Page 2.3.3.1
  63.                 uri: page2/page2_3/page2_3_3/1
  64.                 active: 1
  65.               page2_3_3_2:
  66.                 label: Page 2.3.3.2
  67.                 uri: page2/page2_3/page2_3_3/2
  68.                 resource: guest
  69.                 active: 1
  70.   page3:
  71.     label: Page 3
  72.     uri: page3
  73.     pages:
  74.       page3_1:
  75.         label: Page 3.1
  76.         uri: page3/page3_1
  77.         resource: guest
  78.       page3_2:
  79.         label: Page 3.2
  80.         uri: page3/page3_2
  81.         resource: member
  82.         pages:
  83.           page3_2_1:
  84.             label: Page 3.2.1
  85.             uri: page3/page3_2/page3_2_1
  86.           page3_2_2:
  87.             label: Page 3.2.2
  88.             uri: page3/page3_2/page3_2_2
  89.             resource: admin
  90.       page3_3:
  91.         label: Page 3.3
  92.         uri: page3/page3_3
  93.         resource: special
  94.         pages:
  95.           page3_3_1:
  96.             label: Page 3.3.1
  97.             uri: page3/page3_3/page3_3_1
  98.             visible: 0
  99.           page3_3_2:
  100.             label: Page 3.3.2
  101.             uri: page3/page3_3/page3_3_2
  102.             resource: admin
  103.   home:
  104.     label: Home
  105.     order: -100
  106.     module: default
  107.     controller: index
  108.     action: index
  1. span style="color: #ff0000;">'/path/to/navigation.yaml', 'nav'

Adding pages

Adding pages to a container can be done with the methods addPage(), addPages(), or setPages(). See examples below for explanation.

Example #3 Adding pages to a container

  1. // create container
  2. // add page by giving a page instance
  3. 'uri' => 'http://www.example.com/',
  4. )));
  5.  
  6. // add page by giving an array
  7. 'uri' => 'http://www.example.com/',
  8. ));
  9.  
  10. // add page by giving a config object
  11. 'uri' => 'http://www.example.com/''label'  => 'Save',
  12.         'action' => 'save''label'  => 'Delete',
  13.         'action' => 'delete',
  14.     ),
  15. );
  16.  
  17. // add two pages
  18. $container->addPages($pages);
  19.  
  20. // add container
  21. 'label'  => 'Move up',
  22.         'action' => 'up''label'  => 'Move down',
  23.         'action' => 'down',
  24.     ),
  25. )));
  26.  
  27. // remove existing pages and add the given pages
  28. $container->setPages($pages);

Removing pages

Removing pages can be done with removePage() or removePages(). The first method accepts a an instance of a page, or an integer. The integer corresponds to the order a page has. The latter method will remove all pages in the container.

Example #4 Removing pages from a container

  1. span style="color: #ff0000;">'label'  => 'Page 1',
  2.         'action' => 'page1''label'  => 'Page 2',
  3.         'action' => 'page2',
  4.         'order''label'  => 'Page 3',
  5.         'action' => 'page3'
  6.     )
  7. ));
  8.  
  9. // remove page by implicit page order
  10. $container->removePage(0);      // removes Page 1
  11.  
  12. // remove page by instance
  13. 'page3');
  14. $container->removePage($page3); // removes Page 3
  15.  
  16. // remove page by explicit page order
  17. $container->removePage(200);    // removes Page 2
  18.  
  19. // remove all pages
  20. $container->removePages();      // removes all pages

Finding pages

Containers have finder methods for retrieving pages. They are findOneBy($property, $value, $useRegex = false), findAllBy($property, $value, $useRegex = false), and findBy($property, $value, $all = false, $useRegex = false). Those methods will recursively search the container for pages matching the given $page->$property == $value or when regular expressions are used: preg_match($value, $page->$property). The first method, findOneBy(), will return a single page matching the property with the given value, or NULL if it cannot be found. The second method will return all pages with a property matching the given value. The third method will call one of the two former methods depending on the $all flag.

The finder methods can also be used magically by appending the property name to findBy, findOneBy, or findAllBy, e.g. findOneByLabel('Home') to return the first matching page with label 'Home'. Other combinations are findByLabel(...), findOnyByTitle(...), findAllByController(...), etc. Finder methods also work on custom properties, such as findByFoo('bar').

Example #5 Finding pages in a container

  1. span style="color: #ff0000;">'label' => 'Page 1',
  2.         'uri'   => 'page-1',
  3.         'foo'   => 'bar',
  4.         'pages''label' => 'Page 1.1',
  5.                 'uri'   => 'page-1.1',
  6.                 'foo'   => 'bar''label' => 'Page 1.2',
  7.                 'uri'   => 'page-1.2',
  8.                 'class' => 'my-class''type'   => 'uri',
  9.                 'label'  => 'Page 1.3',
  10.                 'uri'    => 'page-1.3',
  11.                 'action' => 'about''label'      => 'Page 2',
  12.         'id'         => 'page_2_and_3',
  13.         'class'      => 'my-class',
  14.         'module'     => 'page2',
  15.         'controller' => 'index',
  16.         'action'     => 'page1''label'      => 'Page 3',
  17.         'id'         => 'page_2_and_3',
  18.         'module'     => 'page3',
  19.         'controller' => 'index'
  20.     )
  21. ));
  22.  
  23. // The 'id' is not required to be unique, but be aware that
  24. // having two pages with the same id will render the same id attribute
  25. // in menus and breadcrumbs.
  26. $found = $container->findBy('id', 'page_2_and_3'); // returns Page 2
  27. 'id', 'page_2_and_3'); // returns Page 2
  28. $found = $container->findBy('id', 'page_2_and_3'// returns Page 2 and Page 3
  29. $found = $container->findById('page_2_and_3'); // returns Page 2
  30. 'page_2_and_3'); // returns Page 2
  31. $found = $container->findAllById('page_2_and_3'); // returns Page 2 and Page 3
  32.  
  33. // Find all matching CSS class my-class
  34. $found = $container->findAllBy('class', 'my-class'); // returns Page 1.2 and Page 2
  35. 'my-class')// returns Page 1.2 and Page 2
  36.  
  37. // Find first matching CSS class my-class
  38. 'my-class'); // returns Page 1.2
  39.  
  40. // Find all matching CSS class non-existant
  41. 'non-existant'); // returns array()
  42.  
  43. // Find first matching CSS class non-existant
  44. 'non-existant'); // returns null
  45.  
  46. // Find all pages with custom property 'foo' = 'bar'
  47. $found = $container->findAllBy('foo', 'bar'); // returns Page 1 and Page 1.1
  48.  
  49. // To achieve the same magically, 'foo' must be in lowercase.
  50. // This is because 'foo' is a custom property, and thus the
  51. // property name is not normalized to 'Foo'
  52. $found = $container->findAllByfoo('bar');
  53.  
  54. // Find all with controller = 'index'
  55. $found = $container->findAllByController('index'); // returns Page 2 and Page 3

Use regular expressions to find pages:

  1. $found = $container->findBy('class','/my/'// returns Page 1.2
  2. 'class', '/my/'// returns Page 1.2
  3. $found = $container->findBy('class', '/my/'// returns Page 1.2 and Page 2
  4. $found = $container->findAllBy('class', '/my/'// returns Page 1.2 and Page 2
  5. '/my/'// returns Page 1.2
  6. '/my/'// returns Page 1.2 and Page 2

Iterating containers

Zend_Navigation_Container implements RecursiveIteratorIterator, and can be iterated using any Iterator class. To iterate a container recursively, use the RecursiveIteratorIterator class.

Example #6 Iterating a container

  1. /*
  2. * Create a container from an array
  3. */'label' => 'Page 1',
  4.         'uri'   => '#''label' => 'Page 2',
  5.         'uri'   => '#',
  6.         'pages''label' => 'Page 2.1',
  7.                 'uri'   => '#''label' => 'Page 2.2',
  8.                 'uri'   => '#''label' => 'Page 3',
  9.         'uri'   => '#'
  10.     )
  11. ));
  12.  
  13. // Iterate flat using regular foreach:
  14. // Output: Page 1, Page 2, Page 3
  15. // Iterate recursively using RecursiveIteratorIterator
  16. // Output: Page 1, Page 2, Page 2.1, Page 2.2, Page 3

Other operations

The method hasPage(Zend_Navigation_Page $page) checks if the container has the given page. The method hasPages() checks if there are any pages in the container, and is equivalent to count($container) > 1.

The toArray() method converts the container and the pages in it to an array. This can be useful for serializing and debugging.

Example #7 Converting a container to an array

  1. span style="color: #ff0000;">'label' => 'Page 1',
  2.         'uri'   => '#''label' => 'Page 2',
  3.         'uri'   => '#',
  4.         'pages''label' => 'Page 2.1',
  5.                 'uri'   => '#''label' => 'Page 2.2',
  6.                'uri'   => '#'/* Output:
  7. array(2) {
  8.   [0]=> array(15) {
  9.     ["label"]=> string(6) "Page 1"
  10.     ["id"]=> NULL
  11.     ["class"]=> NULL
  12.     ["title"]=> NULL
  13.     ["target"]=> NULL
  14.     ["rel"]=> array(0) {
  15.     }
  16.     ["rev"]=> array(0) {
  17.     }
  18.     ["order"]=> NULL
  19.     ["resource"]=> NULL
  20.     ["privilege"]=> NULL
  21.     ["active"]=> bool(false)
  22.     ["visible"]=> bool(true)
  23.     ["type"]=> string(23) "Zend_Navigation_Page_Uri"
  24.     ["pages"]=> array(0) {
  25.     }
  26.     ["uri"]=> string(1) "#"
  27.   }
  28.   [1]=> array(15) {
  29.     ["label"]=> string(6) "Page 2"
  30.     ["id"]=> NULL
  31.     ["class"]=> NULL
  32.     ["title"]=> NULL
  33.     ["target"]=> NULL
  34.     ["rel"]=> array(0) {
  35.     }
  36.     ["rev"]=> array(0) {
  37.     }
  38.     ["order"]=> NULL
  39.     ["resource"]=> NULL
  40.     ["privilege"]=> NULL
  41.     ["active"]=> bool(false)
  42.     ["visible"]=> bool(true)
  43.     ["type"]=> string(23) "Zend_Navigation_Page_Uri"
  44.     ["pages"]=> array(2) {
  45.       [0]=> array(15) {
  46.         ["label"]=> string(8) "Page 2.1"
  47.         ["id"]=> NULL
  48.         ["class"]=> NULL
  49.         ["title"]=> NULL
  50.         ["target"]=> NULL
  51.         ["rel"]=> array(0) {
  52.         }
  53.         ["rev"]=> array(0) {
  54.         }
  55.         ["order"]=> NULL
  56.         ["resource"]=> NULL
  57.         ["privilege"]=> NULL
  58.         ["active"]=> bool(false)
  59.         ["visible"]=> bool(true)
  60.         ["type"]=> string(23) "Zend_Navigation_Page_Uri"
  61.         ["pages"]=> array(0) {
  62.         }
  63.         ["uri"]=> string(1) "#"
  64.       }
  65.       [1]=>
  66.       array(15) {
  67.         ["label"]=> string(8) "Page 2.2"
  68.         ["id"]=> NULL
  69.         ["class"]=> NULL
  70.         ["title"]=> NULL
  71.         ["target"]=> NULL
  72.         ["rel"]=> array(0) {
  73.         }
  74.         ["rev"]=> array(0) {
  75.         }
  76.         ["order"]=> NULL
  77.         ["resource"]=> NULL
  78.         ["privilege"]=> NULL
  79.         ["active"]=> bool(false)
  80.         ["visible"]=> bool(true)
  81.         ["type"]=> string(23) "Zend_Navigation_Page_Uri"
  82.         ["pages"]=> array(0) {
  83.         }
  84.         ["uri"]=> string(1) "#"
  85.       }
  86.     }
  87.     ["uri"]=> string(1) "#"
  88.   }
  89. }
  90. */

Pages