2
0

Zend_Navigation-Containers.xml 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 22762 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.navigation.containers">
  5. <title>Container</title>
  6. <para>
  7. Container haben Methoden für das Hinzufügen, Empfangen, Löschen und Durchlaufen von Seiten.
  8. Container implementieren die <ulink url="http://php.net/spl">SPL</ulink> Interfaces
  9. <classname>RecursiveIterator</classname> und <classname>Countable</classname>, was bedeutet
  10. das ein Container durchlaufen werden kann indem die SPL Klasse
  11. <classname>RecursiveIteratorIterator</classname> verwendet wird.
  12. </para>
  13. <sect2 id="zend.navigation.containers.creating">
  14. <title>Erstellen von Containern</title>
  15. <para>
  16. <classname>Zend_Navigation_Container</classname> ist abstrakt, und kann nicht direkt
  17. instanziiert werden. Verwende <classname>Zend_Navigation</classname> wenn ein
  18. Container instanziiert werden soll.
  19. </para>
  20. <para>
  21. <classname>Zend_Navigation</classname> kann komplett leer erstellt werden, oder indem
  22. ein Array genommen wird, oder ein <classname>Zend_Config</classname> Objekt mit Seiten
  23. in den Container gegeben wird. Jede seite in dem gegebenen Array/Config wird
  24. eventuell an die <methodname>addPage()</methodname> Methode der Container Klasse
  25. übergeben, was bedeutet das jedes Element im Array/Config ein Array oder Config Objekt
  26. sein kann, oder eine Instanz von <classname>Zend_Navigation_Page</classname>.
  27. </para>
  28. <example id="zend.navigation.containers.creating.example.array">
  29. <title>Erstellt einen Container indem ein Array verwendet wird</title>
  30. <programlisting language="php"><![CDATA[
  31. /*
  32. * Erstellt einen Container von einem Array
  33. *
  34. * Jedes Element im Array wird an Zend_Navigation_Page::factory() übergeben
  35. * wenn es erstellt wird.
  36. */
  37. $container = new Zend_Navigation(array(
  38. array(
  39. 'label' => 'Seite 1',
  40. 'id' => 'home-link',
  41. 'uri' => '/'
  42. ),
  43. array(
  44. 'label' => 'Zend',
  45. 'uri' => 'http://www.zend-project.com/',
  46. 'order' => 100
  47. ),
  48. array(
  49. 'label' => 'Seite 2',
  50. 'controller' => 'page2',
  51. 'pages' => array(
  52. array(
  53. 'label' => 'Seite 2.1',
  54. 'action' => 'page2_1',
  55. 'controller' => 'page2',
  56. 'class' => 'special-one',
  57. 'title' => 'Dieses Element hat eine spezielle Klasse',
  58. 'active' => true
  59. ),
  60. array(
  61. 'label' => 'Seite 2.2',
  62. 'action' => 'page2_2',
  63. 'controller' => 'page2',
  64. 'class' => 'special-two',
  65. 'title' => 'Dieses Element hat auch eine spezielle Klasse'
  66. )
  67. )
  68. ),
  69. array(
  70. 'label' => 'Seite 2 mit Parametern',
  71. 'action' => 'index',
  72. 'controller' => 'page2',
  73. // Spezifiziert einen Parameter oder zwei
  74. 'params' => array(
  75. 'format' => 'json',
  76. 'foo' => 'bar'
  77. )
  78. ),
  79. array(
  80. 'label' => 'Seite 2 mit Parametern und einer Route',
  81. 'action' => 'index',
  82. 'controller' => 'page2',
  83. // Spezifiziert einen Routen Namen und einen Parameter für die Route
  84. 'route' => 'nav-route-example',
  85. 'params' => array(
  86. 'format' => 'json'
  87. )
  88. ),
  89. array(
  90. 'label' => 'Seite 3',
  91. 'action' => 'index',
  92. 'controller' => 'index',
  93. 'module' => 'mymodule',
  94. 'reset_params' => false
  95. ),
  96. array(
  97. 'label' => 'Seite 4',
  98. 'uri' => '#',
  99. 'pages' => array(
  100. array(
  101. 'label' => 'Seite 4.1',
  102. 'uri' => '/page4',
  103. 'title' => 'Seite 4 mit Verwendung von URI',
  104. 'pages' => array(
  105. array(
  106. 'label' => 'Seite 4.1.1',
  107. 'title' => 'Seite 4 mit Verwendung von MVC Parametern',
  108. 'action' => 'index',
  109. 'controller' => 'page4',
  110. // Sagen wir das diese Seite aktiv ist
  111. 'active' => '1'
  112. )
  113. )
  114. )
  115. )
  116. ),
  117. array(
  118. 'label' => 'Seite 0?',
  119. 'uri' => '/setting/the/order/option',
  120. // Setzt die Reihenfolge auf -1, damit Sie als erstes erscheint
  121. 'order' => -1
  122. ),
  123. array(
  124. 'label' => 'Seite 5',
  125. 'uri' => '/',
  126. // Diese Seite sollte nicht sichtbar sein
  127. 'visible' => false,
  128. 'pages' => array(
  129. array(
  130. 'label' => 'Seite 5.1',
  131. 'uri' => '#',
  132. 'pages' => array(
  133. array(
  134. 'label' => 'Seite 5.1.1',
  135. 'uri' => '#',
  136. 'pages' => array(
  137. array(
  138. 'label' => 'Seite 5.1.2',
  139. 'uri' => '#',
  140. // Sagen wir das die Seite aktiv ist
  141. 'active' => true
  142. )
  143. )
  144. )
  145. )
  146. )
  147. )
  148. ),
  149. array(
  150. 'label' => 'ACL Seite 1 (guest)',
  151. 'uri' => '#acl-guest',
  152. 'resource' => 'nav-guest',
  153. 'pages' => array(
  154. array(
  155. 'label' => 'ACL Seite 1.1 (foo)',
  156. 'uri' => '#acl-foo',
  157. 'resource' => 'nav-foo'
  158. ),
  159. array(
  160. 'label' => 'ACL Seite 1.2 (bar)',
  161. 'uri' => '#acl-bar',
  162. 'resource' => 'nav-bar'
  163. ),
  164. array(
  165. 'label' => 'ACL Seite 1.3 (baz)',
  166. 'uri' => '#acl-baz',
  167. 'resource' => 'nav-baz'
  168. ),
  169. array(
  170. 'label' => 'ACL Seite 1.4 (bat)',
  171. 'uri' => '#acl-bat',
  172. 'resource' => 'nav-bat'
  173. )
  174. )
  175. ),
  176. array(
  177. 'label' => 'ACL Seite 2 (member)',
  178. 'uri' => '#acl-member',
  179. 'resource' => 'nav-member'
  180. ),
  181. array(
  182. 'label' => 'ACL Seite 3 (admin)',
  183. 'uri' => '#acl-admin',
  184. 'resource' => 'nav-admin',
  185. 'pages' => array(
  186. array(
  187. 'label' => 'ACL Seite 3.1 (nothing)',
  188. 'uri' => '#acl-nada'
  189. )
  190. )
  191. ),
  192. array(
  193. 'label' => 'Zend Framework',
  194. 'route' => 'zf-route'
  195. )
  196. ));
  197. ]]></programlisting>
  198. </example>
  199. <example id="zend.navigation.containers.creating.example.config">
  200. <title>Erstellung eines Containers indem ein Config Objekt erstellt wird</title>
  201. <programlisting language="php"><![CDATA[
  202. /* INHALT VON /path/to/navigation.xml:
  203. <?xml version="1.0" encoding="UTF-8"?>
  204. <config>
  205. <nav>
  206. <zend>
  207. <label>Zend</label>
  208. <uri>http://www.zend-project.com/</uri>
  209. <order>100</order>
  210. </zend>
  211. <page1>
  212. <label>Seite 1</label>
  213. <uri>page1</uri>
  214. <pages>
  215. <page1_1>
  216. <label>Seite 1.1</label>
  217. <uri>page1/page1_1</uri>
  218. </page1_1>
  219. </pages>
  220. </page1>
  221. <page2>
  222. <label>Seite 2</label>
  223. <uri>page2</uri>
  224. <pages>
  225. <page2_1>
  226. <label>Seite 2.1</label>
  227. <uri>page2/page2_1</uri>
  228. </page2_1>
  229. <page2_2>
  230. <label>Seite 2.2</label>
  231. <uri>page2/page2_2</uri>
  232. <pages>
  233. <page2_2_1>
  234. <label>Seite 2.2.1</label>
  235. <uri>page2/page2_2/page2_2_1</uri>
  236. </page2_2_1>
  237. <page2_2_2>
  238. <label>Seite 2.2.2</label>
  239. <uri>page2/page2_2/page2_2_2</uri>
  240. <active>1</active>
  241. </page2_2_2>
  242. </pages>
  243. </page2_2>
  244. <page2_3>
  245. <label>Seite 2.3</label>
  246. <uri>page2/page2_3</uri>
  247. <pages>
  248. <page2_3_1>
  249. <label>Seite 2.3.1</label>
  250. <uri>page2/page2_3/page2_3_1</uri>
  251. </page2_3_1>
  252. <page2_3_2>
  253. <label>Seite 2.3.2</label>
  254. <uri>page2/page2_3/page2_3_2</uri>
  255. <visible>0</visible>
  256. <pages>
  257. <page2_3_2_1>
  258. <label>Seite 2.3.2.1</label>
  259. <uri>page2/page2_3/page2_3_2/1</uri>
  260. <active>1</active>
  261. </page2_3_2_1>
  262. <page2_3_2_2>
  263. <label>Seite 2.3.2.2</label>
  264. <uri>page2/page2_3/page2_3_2/2</uri>
  265. <active>1</active>
  266. <pages>
  267. <page_2_3_2_2_1>
  268. <label>Ignoriert</label>
  269. <uri>#</uri>
  270. <active>1</active>
  271. </page_2_3_2_2_1>
  272. </pages>
  273. </page2_3_2_2>
  274. </pages>
  275. </page2_3_2>
  276. <page2_3_3>
  277. <label>Seite 2.3.3</label>
  278. <uri>page2/page2_3/page2_3_3</uri>
  279. <resource>admin</resource>
  280. <pages>
  281. <page2_3_3_1>
  282. <label>Seite 2.3.3.1</label>
  283. <uri>page2/page2_3/page2_3_3/1</uri>
  284. <active>1</active>
  285. </page2_3_3_1>
  286. <page2_3_3_2>
  287. <label>Seite 2.3.3.2</label>
  288. <uri>page2/page2_3/page2_3_3/2</uri>
  289. <resource>guest</resource>
  290. <active>1</active>
  291. </page2_3_3_2>
  292. </pages>
  293. </page2_3_3>
  294. </pages>
  295. </page2_3>
  296. </pages>
  297. </page2>
  298. <page3>
  299. <label>Seite 3</label>
  300. <uri>page3</uri>
  301. <pages>
  302. <page3_1>
  303. <label>Seite 3.1</label>
  304. <uri>page3/page3_1</uri>
  305. <resource>guest</resource>
  306. </page3_1>
  307. <page3_2>
  308. <label>Seite 3.2</label>
  309. <uri>page3/page3_2</uri>
  310. <resource>member</resource>
  311. <pages>
  312. <page3_2_1>
  313. <label>Seite 3.2.1</label>
  314. <uri>page3/page3_2/page3_2_1</uri>
  315. </page3_2_1>
  316. <page3_2_2>
  317. <label>Seite 3.2.2</label>
  318. <uri>page3/page3_2/page3_2_2</uri>
  319. <resource>admin</resource>
  320. </page3_2_2>
  321. </pages>
  322. </page3_2>
  323. <page3_3>
  324. <label>Seite 3.3</label>
  325. <uri>page3/page3_3</uri>
  326. <resource>special</resource>
  327. <pages>
  328. <page3_3_1>
  329. <label>Seite 3.3.1</label>
  330. <uri>page3/page3_3/page3_3_1</uri>
  331. <visible>0</visible>
  332. </page3_3_1>
  333. <page3_3_2>
  334. <label>Seite 3.3.2</label>
  335. <uri>page3/page3_3/page3_3_2</uri>
  336. <resource>admin</resource>
  337. </page3_3_2>
  338. </pages>
  339. </page3_3>
  340. </pages>
  341. </page3>
  342. <home>
  343. <label>Home</label>
  344. <order>-100</order>
  345. <module>default</module>
  346. <controller>index</controller>
  347. <action>index</action>
  348. </home>
  349. </nav>
  350. </config>
  351. */
  352. $config = new Zend_Config_Xml('/path/to/navigation.xml', 'nav');
  353. $container = new Zend_Navigation($config);
  354. ]]></programlisting>
  355. </example>
  356. </sect2>
  357. <sect2 id="zend.navigation.containers.adding">
  358. <title>Hinzufügen von Seiten</title>
  359. <para>
  360. Das Hinzufügen von Seiten in einen Container kann mit den Methoden
  361. <methodname>addPage()</methodname>, <methodname>addPages()</methodname> oder
  362. <methodname>setPages()</methodname> durchgeführt werden. Das folgende Beispiel zeigt
  363. eine Erklärung des ganzen.
  364. </para>
  365. <example id="zend.navigation.containers.adding.example">
  366. <title>Hinzufügen von Seiten zu einem Container</title>
  367. <programlisting language="php"><![CDATA[
  368. // Container erstellen
  369. $container = new Zend_Navigation();
  370. // Seite durch die Angabe eine Instanz einer Page hinzufügen
  371. $container->addPage(Zend_Navigation_Page::factory(array(
  372. 'uri' => 'http://www.example.com/'
  373. )))
  374. // Seite durch die Angabe eines Arrays hinzufügen
  375. $container->addPage(array(
  376. 'uri' => 'http://www.example.com/'
  377. )))
  378. // Seite durch die Angabe eines Config Objekts hinzufügen
  379. $container->addPage(new Zend_Config(array(
  380. 'uri' => 'http://www.example.com/'
  381. )))
  382. $pages = array(
  383. array(
  384. 'label' => 'Speichern'
  385. 'action' => 'save',
  386. ),
  387. array(
  388. 'label' => 'Löschen',
  389. 'action' => 'delete'
  390. )
  391. );
  392. // Zwei Seiten hinzufügen
  393. $container->addPages($pages);
  394. // Bestehende Seite entfernen und die gegebenen Seiten hinzufügen
  395. $container->setPages($pages);
  396. ]]></programlisting>
  397. </example>
  398. </sect2>
  399. <sect2 id="zend.navigation.containers.removing">
  400. <title>Seiten löschen</title>
  401. <para>
  402. Das Löschen von Seiten kann mit <methodname>removePage()</methodname> oder
  403. <methodname>removePages()</methodname> durchgeführt werden. Die ersten Methode
  404. akzeptiert eine Instanz einer Seite, oder ein Integer. Der Integer korrespondiert mit
  405. der <property>order</property> welche die Seite hat. Die letztere Methode entfernt alle
  406. Seiten vom Container.
  407. </para>
  408. <example id="zend.navigation.containers.removing.example">
  409. <title>Seiten von einem Container entfernen</title>
  410. <programlisting language="php"><![CDATA[
  411. $container = new Zend_Navigation(array(
  412. array(
  413. 'label' => 'Seite 1',
  414. 'action' => 'page1'
  415. ),
  416. array(
  417. 'label' => 'Seite 2',
  418. 'action' => 'page2',
  419. 'order' => 200
  420. ),
  421. array(
  422. 'label' => 'Seite 3',
  423. 'action' => 'page3'
  424. )
  425. ));
  426. // Entfernt eine Seite implizit durch die Reihenfolge der Seite
  427. $container->removePage(0); // Entfernt Seite 1
  428. // Entfernt eine Seite durch die Instanz
  429. $page3 = $container->findOneByAction('page3');
  430. $container->removePage($page3); // Entfernt Seite 3
  431. // Entfernt eine Seite durch explizite angabe der Reihenfolge der Seite
  432. $container->removePage(200); // Entfernt Seite 2
  433. // Entfernt alle Seiten
  434. $container->removePages(); // Entfernt alle Seiten
  435. ]]></programlisting>
  436. </example>
  437. </sect2>
  438. <sect2 id="zend.navigation.containers.finding">
  439. <title>Seiten finden</title>
  440. <para>
  441. Container haben Finder Methoden für das Empfangen von Seiten. Es gibt
  442. <methodname>findOneBy($property, $value)</methodname>,
  443. <methodname>findAllBy($property, $value)</methodname> und
  444. <methodname>findBy($property, $value, $all = false)</methodname>. Diese Methoden
  445. durchsuchen rekursiv den Container nach Seiten die dem angegebenen
  446. <command>$page->$property == $value</command> entsprechen. Die erste Methode,
  447. <methodname>findOneBy()</methodname>, gibt eine einzelne Seite zurück die der
  448. angegebenen Eigenschaft mit dem angegebenen Wert entspricht, oder
  449. <constant>NULL</constant> wenn Sie nicht gefunden werden kann. Die zweite Methode wird
  450. alle Seiten mit einer Eigenschaft zurückgeben die dem angegebenen Wert entspricht. Die
  451. dritte Methode wird eine eine der zwei anderen Methoden aufrufen, abhängig vom
  452. <varname>$all</varname> Flag.
  453. </para>
  454. <para>
  455. Die Finder Methoden können auch magisch verwendet werden indem der Name der
  456. Eigenschaft an <property>findBy</property>, <property>findOneBy</property> oder
  457. <property>findAllBy</property> angehängt wird, z.B.
  458. <methodname>findOneByLabel('Home')</methodname> um die erste passende Seite mit dem
  459. Label 'Home' zu finden. Andere Kombinationen sind
  460. <methodname>findByLabel(...)</methodname>, <methodname>findOnyByTitle(...)</methodname>,
  461. <methodname>findAllByController(...)</methodname>, usw. Finder Methoden funktionieren
  462. auch mit eigenen Eigenschaften, so wie z.B. <methodname>findByFoo('bar')</methodname>.
  463. </para>
  464. <example id="zend.navigation.containers.finding.example">
  465. <title>Seiten in einem Container finden</title>
  466. <programlisting language="php"><![CDATA[
  467. $container = new Zend_Navigation(array(
  468. array(
  469. 'label' => 'Seite 1',
  470. 'uri' => 'page-1',
  471. 'foo' => 'bar',
  472. 'pages' => array(
  473. array(
  474. 'label' => 'Seite 1.1',
  475. 'uri' => 'page-1.1',
  476. 'foo' => 'bar',
  477. ),
  478. array(
  479. 'label' => 'Seite 1.2',
  480. 'uri' => 'page-1.2',
  481. 'class' => 'my-class',
  482. ),
  483. array(
  484. 'type' => 'uri',
  485. 'label' => 'Seite 1.3',
  486. 'uri' => 'page-1.3',
  487. 'action' => 'about'
  488. )
  489. )
  490. ),
  491. array(
  492. 'label' => 'Seite 2',
  493. 'id' => 'page_2_and_3',
  494. 'class' => 'my-class',
  495. 'module' => 'page2',
  496. 'controller' => 'index',
  497. 'action' => 'page1'
  498. ),
  499. array(
  500. 'label' => 'Seite 3',
  501. 'id' => 'page_2_and_3',
  502. 'module' => 'page3',
  503. 'controller' => 'index'
  504. )
  505. ));
  506. // Die 'id' muß nicht eindeutig sein, aber man sollte darauf achten das wenn
  507. // man zwei Seiten mit der gleichen Id hat, diese die gleichen Id Attribute in
  508. // Menüs und Breadcrumbs darstellen werden
  509. $found = $container->findBy('id',
  510. 'page_2_and_3'); // Gibt Seite 2 zurück
  511. $found = $container->findOneBy('id',
  512. 'page_2_and_3'); // Gibt Seite 2 zurück
  513. $found = $container->findBy('id',
  514. 'page_2_and_3',
  515. true); // Gibt Seite 2 und 3 zurück
  516. $found = $container->findById('page_2_and_3'); // Gibt Seite 2 zurück
  517. $found = $container->findOneById('page_2_and_3'); // Gibt Seite 2 zurück
  518. $found = $container->findAllById('page_2_and_3'); // Gibt Seite 2 und 3 zurück
  519. // Finde alle zu my-class passenden CSS Klassen
  520. $found = $container->findAllBy('class',
  521. 'my-class'); // Gibt Seite 1.2 und 2 zurück
  522. $found = $container->findAllByClass('my-class'); // Gibt Seite 1.2 und 2 zurück
  523. // Finde die erste zu my-class passende CSS Klasse
  524. $found = $container->findOneByClass('my-class'); // Gibt Seite 1.2 zurück
  525. // Findet alle zu non-existant passenden CSS Klassen
  526. $found = $container->findAllByClass('non-existant'); // Gibt array() zurück
  527. // Findet die erste zu non-existant passende CSS Klasse
  528. $found = $container->findOneByClass('non-existant'); // Gibt null zurück
  529. // Findet alle Seiten mit den eigenen Eigenschaften 'foo' = 'bar'
  530. $found = $container->findAllBy('foo', 'bar'); // Gibt Seite 1 und 1.1 zurück
  531. // Um das gleiche auf Magische Weise zu ermöglichen, muß 'foo' kleingeschrieben
  532. // sein weil 'foo' eine eigene Eigenschaft ist und deshalb der Name der
  533. // Eigenschaft nicht zu 'Foo' normalisiert wird
  534. $found = $container->findAllByfoo('bar');
  535. // Findet alle mit controller = 'index'
  536. $found = $container->findAllByController('index'); // Gibt Seite 2 und 3 zurück
  537. ]]></programlisting>
  538. </example>
  539. </sect2>
  540. <sect2 id="zend.navigation.containers.iterating">
  541. <title>Container durchsuchen</title>
  542. <para>
  543. <classname>Zend_Navigation_Container</classname> implementiert
  544. <classname>RecursiveIteratorIterator</classname>, und kann mit jeder
  545. <classname>Iterator</classname> Klasse durchsucht werden. Um einen Container
  546. rekursiv zu durchsuchen, kann die <classname>RecursiveIteratorIterator</classname>
  547. Klasse verwendet werden.
  548. </para>
  549. <example id="zend.navigation.containers.iterating.example">
  550. <title>Einen Container durchsuchen</title>
  551. <programlisting language="php"><![CDATA[
  552. /*
  553. * Erstellt einen Container von einem Array
  554. */
  555. $container = new Zend_Navigation(array(
  556. array(
  557. 'label' => 'Seite 1',
  558. 'uri' => '#'
  559. ),
  560. array(
  561. 'label' => 'Seite 2',
  562. 'uri' => '#',
  563. 'pages' => array(
  564. array(
  565. 'label' => 'Seite 2.1',
  566. 'uri' => '#'
  567. ),
  568. array(
  569. 'label' => 'Seite 2.2',
  570. 'uri' => '#'
  571. )
  572. )
  573. )
  574. array(
  575. 'label' => 'Seite 3',
  576. 'uri' => '#'
  577. )
  578. ));
  579. // Durchsucht flach indem ein normales foreach verwendet wird:
  580. // Ausgabe: Seite 1, Seite 2, Seite 3
  581. foreach ($container as $page) {
  582. echo $page->label;
  583. }
  584. // Durchsucht rekursiv indem RecursiveIteratorIterator verwendet wird
  585. $it = new RecursiveIteratorIterator(
  586. $container, RecursiveIteratorIterator::SELF_FIRST);
  587. // Ausgabe: Seite 1, Seite 2, Seite 2.1, Seite 2.2, Seite 3
  588. foreach ($it as $page) {
  589. echo $page->label;
  590. }
  591. ]]></programlisting>
  592. </example>
  593. </sect2>
  594. <sect2 id="zend.navigation.containers.other">
  595. <title>Andere Operationen</title>
  596. <para>
  597. Die Methode <methodname>hasPage(Zend_Navigation_Page $page)</methodname> prüft ob der
  598. Container die angegebene Seite besitzt. Die Methode <methodname>hasPages()</methodname>
  599. prüft ob irgendeine Seite im Container existiert, und ist gleich mit
  600. <command>count($container) > 1</command>.
  601. </para>
  602. <para>
  603. Die <methodname>toArray()</methodname> Methode konvertiert den Container und die Seiten
  604. in Ihm zu einem Array. Das kann für eine Serialisierung und das Debugging nützlich sein.
  605. </para>
  606. <example id="zend.navigation.containers.other.example.toarray">
  607. <title>Einen Container in ein Array konvertieren</title>
  608. <programlisting language="php"><![CDATA[
  609. $container = new Zend_Navigation(array(
  610. array(
  611. 'label' => 'Seite 1',
  612. 'uri' => '#'
  613. ),
  614. array(
  615. 'label' => 'Seite 2',
  616. 'uri' => '#',
  617. 'pages' => array(
  618. array(
  619. 'label' => 'Seite 2.1',
  620. 'uri' => '#'
  621. ),
  622. array(
  623. 'label' => 'Seite 2.2',
  624. 'uri' => '#'
  625. )
  626. )
  627. )
  628. ));
  629. var_dump($container->toArray());
  630. /* Ausgabe:
  631. array(2) {
  632. [0]=> array(15) {
  633. ["label"]=> string(6) "Seite 1"
  634. ["id"]=> NULL
  635. ["class"]=> NULL
  636. ["title"]=> NULL
  637. ["target"]=> NULL
  638. ["rel"]=> array(0) {
  639. }
  640. ["rev"]=> array(0) {
  641. }
  642. ["order"]=> NULL
  643. ["resource"]=> NULL
  644. ["privilege"]=> NULL
  645. ["active"]=> bool(false)
  646. ["visible"]=> bool(true)
  647. ["type"]=> string(23) "Zend_Navigation_Page_Uri"
  648. ["pages"]=> array(0) {
  649. }
  650. ["uri"]=> string(1) "#"
  651. }
  652. [1]=> array(15) {
  653. ["label"]=> string(6) "Seite 2"
  654. ["id"]=> NULL
  655. ["class"]=> NULL
  656. ["title"]=> NULL
  657. ["target"]=> NULL
  658. ["rel"]=> array(0) {
  659. }
  660. ["rev"]=> array(0) {
  661. }
  662. ["order"]=> NULL
  663. ["resource"]=> NULL
  664. ["privilege"]=> NULL
  665. ["active"]=> bool(false)
  666. ["visible"]=> bool(true)
  667. ["type"]=> string(23) "Zend_Navigation_Page_Uri"
  668. ["pages"]=> array(2) {
  669. [0]=> array(15) {
  670. ["label"]=> string(8) "Seite 2.1"
  671. ["id"]=> NULL
  672. ["class"]=> NULL
  673. ["title"]=> NULL
  674. ["target"]=> NULL
  675. ["rel"]=> array(0) {
  676. }
  677. ["rev"]=> array(0) {
  678. }
  679. ["order"]=> NULL
  680. ["resource"]=> NULL
  681. ["privilege"]=> NULL
  682. ["active"]=> bool(false)
  683. ["visible"]=> bool(true)
  684. ["type"]=> string(23) "Zend_Navigation_Page_Uri"
  685. ["pages"]=> array(0) {
  686. }
  687. ["uri"]=> string(1) "#"
  688. }
  689. [1]=>
  690. array(15) {
  691. ["label"]=> string(8) "Seite 2.2"
  692. ["id"]=> NULL
  693. ["class"]=> NULL
  694. ["title"]=> NULL
  695. ["target"]=> NULL
  696. ["rel"]=> array(0) {
  697. }
  698. ["rev"]=> array(0) {
  699. }
  700. ["order"]=> NULL
  701. ["resource"]=> NULL
  702. ["privilege"]=> NULL
  703. ["active"]=> bool(false)
  704. ["visible"]=> bool(true)
  705. ["type"]=> string(23) "Zend_Navigation_Page_Uri"
  706. ["pages"]=> array(0) {
  707. }
  708. ["uri"]=> string(1) "#"
  709. }
  710. }
  711. ["uri"]=> string(1) "#"
  712. }
  713. }
  714. */
  715. ]]></programlisting>
  716. </example>
  717. </sect2>
  718. </sect1>