Zend_View-Helpers-Navigation.xml 82 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 14978 -->
  3. <!-- Reviewed: no -->
  4. <sect3 id="zend.view.helpers.initial.navigation">
  5. <title>Navigations Helfer</title>
  6. <para>
  7. Die Navigations Helfer werden von
  8. <link linkend="zend.navigation.containers">Zend_Navigation_Container</link> für die
  9. Darstellung von Navigations Elementen verwendet.
  10. </para>
  11. <para>
  12. Es gibt 2 eingebaute Helfer:
  13. <itemizedlist>
  14. <listitem>
  15. <para>
  16. <link linkend="zend.view.helpers.initial.navigation.breadcrumbs">Breadcrumbs</link>,
  17. wird für die Darstellung des Pfades der aktuell aktiven Seite verwendet.
  18. </para>
  19. </listitem>
  20. <listitem>
  21. <para>
  22. <link linkend="zend.view.helpers.initial.navigation.links">Links</link>,
  23. wird für die Darstellung von Navigations Header Links (z.B.
  24. <code>&lt;link rel="next" href="..." /&gt;</code>) verwendet.
  25. </para>
  26. </listitem>
  27. <listitem>
  28. <para>
  29. <link linkend="zend.view.helpers.initial.navigation.menu">Menu</link>,
  30. wird für die Darstellung von Menüs verwendet.
  31. </para>
  32. </listitem>
  33. <listitem>
  34. <para>
  35. <link linkend="zend.view.helpers.initial.navigation.sitemap">Sitemap</link>,
  36. wird für die Darstellung von Sitemaps verwendet die dem
  37. <ulink url="http://www.sitemaps.org/protocol.php">Sitemaps XML Format</ulink>
  38. entsprechen.
  39. </para>
  40. </listitem>
  41. <listitem>
  42. <para>
  43. <link linkend="zend.view.helpers.initial.navigation.navigation">Navigation</link>,
  44. wird für die Weiterleitung von Aufrufen zu anderen Navigations Helfern verwendet.
  45. </para>
  46. </listitem>
  47. </itemizedlist>
  48. Alle eingebauten Helfer erweitern
  49. <classname>Zend_View_Helper_Navigation_HelperAbstract</classname>, welches die Integration von
  50. <link linkend="zend.acl">ACL</link> und <link linkend="zend.translate">Übersetzung</link>
  51. hinzufügt. Die abstrakte Klasse implementiert das Interface
  52. <classname>Zend_View_Helper_Navigation_Helper</classname> welches die folgenden
  53. Methoden definiert:
  54. <itemizedlist>
  55. <listitem>
  56. <para>
  57. <code>{get|set}Container()</code> empfängt/setzt den Navigations Container
  58. mit dem der Helfer standardmäßig arbeiten soll, und <code>hasContainer()</code>
  59. prüft ob der Helfer Container registriert hat.
  60. </para>
  61. </listitem>
  62. <listitem>
  63. <para>
  64. <code>{get|set}Translator()</code> empfängt/setzt den Übersetzer der für die
  65. Übersetzung von Überschriften und Titelm verwendet wird, und
  66. <code>{get|set}UseTranslator()</code> kontrolliert ob der Übersetzer aktiviert
  67. werden soll. Die Methode <code>hasTranslator()</code> prüft ob der
  68. Helfer einen Übersetzer registriert hat.
  69. </para>
  70. </listitem>
  71. <listitem>
  72. <para>
  73. <code>{get|set}Acl()</code>, <code>{get|set}Role()</code>,
  74. empfängt/setzt ACL (<classname>Zend_Acl</classname>) Instanzen und Rollen
  75. (<code>string</code> oder <classname>Zend_Acl_Role_Interface</classname>)
  76. die bei der Darstellung für das Filtern von Seiten verwendet werden, und
  77. <code>{get|set}UseAcl()</code> kontrolliert ob ACL aktiviert werden soll.
  78. Die Methoden <code>hasAcl()</code> und <code>hasRole()</code> prüfen ob
  79. der Helfer eine ACL Instanz oder Rolle registriert hat.
  80. </para>
  81. </listitem>
  82. <listitem>
  83. <para>
  84. <code>__toString()</code>, die magische Methode stellt sicher das der Helfer,
  85. durch den direkten Aufruf von <code>echo</code> an der Instanz des Helfers,
  86. dargestellt werden kann.
  87. </para>
  88. </listitem>
  89. <listitem>
  90. <para>
  91. <code>render()</code>, muß von konkreten Helfern implementiert werden um die
  92. Darstellung durchzuführen.
  93. </para>
  94. </listitem>
  95. </itemizedlist>
  96. Zusätzlich zu den Methoden die vom Interface kommen, implementiert die abstrakte Klasse
  97. die folgenden Methoden:
  98. <itemizedlist>
  99. <listitem>
  100. <para>
  101. <code>{get|set}Indent()</code> empfängt/setzt die Einrückung. Der Setzer
  102. akzeptiert einen <code>string</code> oder ein <code>int</code>. Im
  103. Fall eines <code>int</code>'s verwendet der Helfer die angegebene Zahl
  104. als Leerzeichen für die Einrückung. Z.B. bedeutet <code>setIndent(4)</code>
  105. eine Einrückung von initial 4 Leerzeichen. Die Einrückung kann für alle
  106. Helfer außer dem Sitemap Helfer spezifiziert werden.
  107. </para>
  108. </listitem>
  109. <listitem>
  110. <para>
  111. <code>{get|set}MinDepth()</code> empfängt/setzt die minimale Tiefe die eine
  112. Seite haben muß um vom Helfer eingefügt zu werden. Das Setzen von
  113. <code>null</code> bedeutet keine minimale Tiefe.
  114. </para>
  115. </listitem>
  116. <listitem>
  117. <para>
  118. <code>{get|set}MaxDepth()</code> empfängt/setzt die maximale Tiefe die eine
  119. Seite haben muß um vom Helfer eingefügt zu werden. Das Setzen von
  120. <code>null</code> bedeutet keine maximale Tiefe.
  121. </para>
  122. </listitem>
  123. <listitem>
  124. <para>
  125. <code>__call()</code> wird verwendet um Aufrufe zum Container, der im Helfer
  126. registriert ist, weiterzuleiten, was bedeutet das man Methoden in einem
  127. Helfer aufrufen kann wie wenn Sie im Container wären. Siehe das folgende
  128. <link linkend="zend.view.helpers.initial.navigation.proxy.example">Beispiel</link>.
  129. </para>
  130. </listitem>
  131. <listitem>
  132. <para>
  133. <code>findActive($container, $minDepth, $maxDepth)</code> wird verwendet um die
  134. tiefste aktive Seite im angegebenen Container zu finden. Wenn keine Tiefe
  135. angegeben wird, verwendet diese Methode die Werte die sie von
  136. <code>getMinDepth()</code> und <code>getMaxDepth()</code> erhält. Die tiefste
  137. aktive Seite muß zwischen <code>$minDepth</code> und <code>$maxDepth</code>
  138. inklusive liegen. Gibt ein Array zurück das Referenzen zu der gefundenen
  139. Instanz der Seite enthält, und die Tiefe bei der die Seite gefunden wurde.
  140. </para>
  141. </listitem>
  142. <listitem>
  143. <para>
  144. <code>htmlify()</code> stellt ein <code>a</code> HTML Element von einer
  145. <classname>Zend_Navigation_Page</classname> Instanz dar.
  146. </para>
  147. </listitem>
  148. <listitem>
  149. <para>
  150. <code>accept()</code> wird verwendet um zu erkennen ub eine Seite akzeptiert
  151. werden soll wenn durch Container iteriert wird. Diese Methode prüft die
  152. Sichtbarkeit der Seite und verifiziert das die Rolle des Helfers auf die
  153. Ressource/Privilegien der Seite zugreifen darf.
  154. </para>
  155. </listitem>
  156. <listitem>
  157. <para>
  158. <code>static setDefaultAcl()</code> wird für das Setzen des standardmäßigen
  159. ACL Objekts verwendet, das dann von Helfern verwendet wird.
  160. </para>
  161. </listitem>
  162. <listitem>
  163. <para>
  164. <code>static setDefaultRole()</code> wird für das Setzen der standardmäßigen
  165. Rolle verwendet, die dann von Helfern verwendet wird.
  166. </para>
  167. </listitem>
  168. </itemizedlist>
  169. </para>
  170. <para>
  171. Wenn ein Navigations Container nicht explizit in einem Helfer durch Verwendung von
  172. <code>$helper->setContainer($nav)</code> gesetzt ist, schaut der Helfer in
  173. <link linkend="zend.registry">der Registry</link> nach einer Container Instanz mit dem
  174. Schlüssel <classname>Zend_Navigation</classname>. Wenn ein Container nicht explizit gesetzt wurde,
  175. oder nicht in der Registry gefunden wird, erstellt der Helfer einen leeren
  176. <classname>Zend_Navigation</classname> Container wenn <code>$helper->getContainer()</code>
  177. aufgerufen wird.
  178. </para>
  179. <example id="zend.view.helpers.initial.navigation.proxy.example">
  180. <title>Aufrufe an den Navigations Container weiterleiten</title>
  181. <para>
  182. Navigations View Helfer verwenden die magisch <code>__call()</code> Methode um
  183. Methodenaufrufe an den Navigationscontainer weiterzuleiten der im View Helfer
  184. registriert ist.
  185. </para>
  186. <programlisting role="php"><![CDATA[
  187. $this->navigation()->addPage(array(
  188. 'type' => 'uri',
  189. 'label' => 'New page'));
  190. ]]>
  191. </programlisting>
  192. <para>
  193. Der obige Aufruf fügt eine Seite zum Container im <classname>Navigation</classname>
  194. Helfer hinzu.
  195. </para>
  196. </example>
  197. <sect4 id="zend.view.helpers.initial.navigation.i18n">
  198. <title>Übersetzung von Labels und Titeln</title>
  199. <para>
  200. Der Navigations Helfer unterstützt die Übersetzung von SeitenLabels und Überschriften.
  201. Man kann einen Übersetzer vom Typ <classname>Zend_Translate</classname> oder
  202. <classname>Zend_Translate_Adapter</classname> im Helfer setzen indem
  203. <code>$helper->setTranslator($translator)</code> verwendet wird, oder wie in allen
  204. anderen I18n-fähigen Komponenten; durch das Hinzufügen des Übersetzers in
  205. <link linkend="zend.registry">die Registry</link> indem der Schlüssel
  206. <classname>Zend_Translate</classname> verwendet wird.
  207. </para>
  208. <para>
  209. Wenn man die Übersetzung ausschalten will, sollte man
  210. <code>$helper->setUseTranslator(false)</code> verwenden.
  211. </para>
  212. <para>
  213. Der <link linkend="zend.view.helpers.initial.navigation.navigation">Proxy Helfer</link>
  214. injiziert seinen eigenen Übersetzer in den Helfer auf den er weiterleitet wenn der
  215. weitergeleitete Helfer nicht bereits einen Übersetzer hat.
  216. </para>
  217. <para>
  218. <note>
  219. <para>
  220. Es gibt keinen Übersetzer im Sitemap Helfer, da keine SeitenLabels oder
  221. Überschriften in einer XML Sitemap enthalten sind.
  222. </para>
  223. </note>
  224. </para>
  225. </sect4>
  226. <sect4 id="zend.view.helpers.initial.navigation.acl">
  227. <title>Integration mit ACL</title>
  228. <para>
  229. Alle navigatorischen View Helfer unterstützen ACL abgeleitet von der
  230. <classname>Zend_View_Helper_Navigation_HelperAbstract</classname> Klasse. Ein
  231. <classname>Zend_Acl</classname> Objekt kann einer Instanz eines Helfers mit
  232. <code>$helper->setAcl($acl)</code> hinzugefügt werden, und eine Rolle mit
  233. <code>$helper->setRole('member')</code> oder
  234. <code>$helper->setRole(new Zend_Acl_Role('member'))</code>. Wenn ACL im Helfer
  235. verwendet wird, muß es der Rolle im Helfer vom ACL erlaubt sein auf die
  236. <code>Ressourcen</code> zuzugreifen und/oder das die <code>Privilegien</code> für diese
  237. Seite bei der Darstellung eingefügt werden dürfen.
  238. </para>
  239. <para>
  240. Wenn eine Seite vom ACL nicht akzeptiert ist, wird auch jede untergeordnete Seite von
  241. der Darstellung ausgenommen sein.
  242. If a page is not accepted by ACL, any descendant page will also
  243. be excluded from rendering.
  244. </para>
  245. <para>
  246. Der <link linkend="zend.view.helpers.initial.navigation.navigation">Proxy Helfer</link>
  247. injiziert seine eigene ACL und Rolle in den Helfer zu dem er weiterleitet wenn der
  248. weitergeleitete Helfer nicht bereits einen hat.
  249. </para>
  250. <para>
  251. Das Beispiel von unten zeigt wie ACL die Darstellung beeinflusst.
  252. </para>
  253. </sect4>
  254. <sect4 id="zend.view.helpers.initial.navigation.setup">
  255. <title>Setup der Navigation das in Beispielen verwendet wird</title>
  256. <para>
  257. Dieses Beispiel zeigt das Setup eines Navigations Container für eine fiktive Software
  258. Firma.
  259. </para>
  260. <para>
  261. Notizen zum Setup:
  262. <itemizedlist>
  263. <listitem>
  264. <para>
  265. Die Domain der Site ist <code>www.example.com</code>.
  266. </para>
  267. </listitem>
  268. <listitem>
  269. <para>
  270. Interessante Eigenschaften der Seite sind mit einem Kommentar markiert.
  271. </para>
  272. </listitem>
  273. <listitem>
  274. <para>
  275. Solange im Beispiel nicht anders erwähnt, fragt der Benutzer nach der URL
  276. <code>http://www.example.com/products/server/faq/</code>, welche auf die
  277. Seite mit dem Label <code>FAQ</code> unter <code>Foo Server</code>
  278. übersetzt wird.
  279. </para>
  280. </listitem>
  281. <listitem>
  282. <para>
  283. Das angenommene ACL und Route Setup wird unter dem Container Setup gezeigt.
  284. </para>
  285. </listitem>
  286. </itemizedlist>
  287. </para>
  288. <programlisting role="php"><![CDATA[
  289. /*
  290. * Navigations Container (config/array)
  291. * Jedes Element im Array wird an Zend_Navigation_Page::factory()
  292. * übergeben wenn der unten angezeigt Navigations Container
  293. * erstellt wird.
  294. */
  295. $pages = array(
  296. array(
  297. 'label' => 'Home',
  298. 'title' => 'Geh zu Home',
  299. 'module' => 'default',
  300. 'controller' => 'index',
  301. 'action' => 'index',
  302. 'order' => -100 // Sicherstellen das Home die erste Seite ist
  303. ),
  304. array(
  305. 'label' => 'Spezielles Angebot nur diese Woche!',
  306. 'module' => 'store',
  307. 'controller' => 'offer',
  308. 'action' => 'amazing',
  309. 'visible' => false // nicht sichtbar
  310. ),
  311. array(
  312. 'label' => 'Produkte',
  313. 'module' => 'products',
  314. 'controller' => 'index',
  315. 'action' => 'index',
  316. 'pages' => array(
  317. array(
  318. 'label' => 'Foo Server',
  319. 'module' => 'products',
  320. 'controller' => 'server',
  321. 'action' => 'index',
  322. 'pages' => array(
  323. array(
  324. 'label' => 'FAQ',
  325. 'module' => 'products',
  326. 'controller' => 'server',
  327. 'action' => 'faq',
  328. 'rel' => array(
  329. 'canonical' => 'http://www.example.com/?page=faq',
  330. 'alternate' => array(
  331. 'module' => 'products',
  332. 'controller' => 'server',
  333. 'action' => 'faq',
  334. 'params' => array('format' => 'xml')
  335. )
  336. )
  337. ),
  338. array(
  339. 'label' => 'Editionen',
  340. 'module' => 'products',
  341. 'controller' => 'server',
  342. 'action' => 'editions'
  343. ),
  344. array(
  345. 'label' => 'System Anforderungen',
  346. 'module' => 'products',
  347. 'controller' => 'server',
  348. 'action' => 'requirements'
  349. )
  350. )
  351. ),
  352. array(
  353. 'label' => 'Foo Studio',
  354. 'module' => 'products',
  355. 'controller' => 'studio',
  356. 'action' => 'index',
  357. 'pages' => array(
  358. array(
  359. 'label' => 'Kunden Stories',
  360. 'module' => 'products',
  361. 'controller' => 'studio',
  362. 'action' => 'customers'
  363. ),
  364. array(
  365. 'label' => 'Support',
  366. 'module' => 'prodcts',
  367. 'controller' => 'studio',
  368. 'action' => 'support'
  369. )
  370. )
  371. )
  372. )
  373. ),
  374. array(
  375. 'label' => 'Firma',
  376. 'title' => 'Über uns',
  377. 'module' => 'company',
  378. 'controller' => 'about',
  379. 'action' => 'index',
  380. 'pages' => array(
  381. array(
  382. 'label' => 'Investor Relations',
  383. 'module' => 'company',
  384. 'controller' => 'about',
  385. 'action' => 'investors'
  386. ),
  387. array(
  388. 'label' => 'News',
  389. 'class' => 'rss', // Klasse
  390. 'module' => 'company',
  391. 'controller' => 'news',
  392. 'action' => 'index',
  393. 'pages' => array(
  394. array(
  395. 'label' => 'Für die Presse',
  396. 'module' => 'company',
  397. 'controller' => 'news',
  398. 'action' => 'press'
  399. ),
  400. array(
  401. 'label' => 'Archiv',
  402. 'route' => 'archive', // Route
  403. 'module' => 'company',
  404. 'controller' => 'news',
  405. 'action' => 'archive'
  406. )
  407. )
  408. )
  409. )
  410. ),
  411. array(
  412. 'label' => 'Community',
  413. 'module' => 'community',
  414. 'controller' => 'index',
  415. 'action' => 'index',
  416. 'pages' => array(
  417. array(
  418. 'label' => 'Mein Account',
  419. 'module' => 'community',
  420. 'controller' => 'account',
  421. 'action' => 'index',
  422. 'resource' => 'mvc:community.account' // Ressource
  423. ),
  424. array(
  425. 'label' => 'Forum',
  426. 'uri' => 'http://forums.example.com/',
  427. 'class' => 'external' // Klasse
  428. )
  429. )
  430. ),
  431. array(
  432. 'label' => 'Administration',
  433. 'module' => 'admin',
  434. 'controller' => 'index',
  435. 'action' => 'index',
  436. 'resource' => 'mvc:admin', // Ressource
  437. 'pages' => array(
  438. array(
  439. 'label' => 'Neuen Artikel schreiben',
  440. 'module' => 'admin',
  441. 'controller' => 'post',
  442. 'aciton' => 'write'
  443. )
  444. )
  445. )
  446. );
  447. // Container von einem Array erstellen
  448. $container = new Zend_Navigation($pages);
  449. // Den Container im Proxy Helfer speichern
  450. $view->getHelper('navigation')->setContainer($container);
  451. // ...oder einfach:
  452. $view->navigation($container);
  453. // ...oder ihn einfach in der Registry speichern:
  454. Zend_Registry::set('Zend_Navigation', $container);
  455. ]]>
  456. </programlisting>
  457. <para>
  458. Zusätzlich zum obigen Container, wird das folgende Setup angenommen:
  459. </para>
  460. <programlisting role="php"><![CDATA[
  461. // Router Setup (Standardrouten und 'archive' Route):
  462. $front = Zend_Controller_Front::getInstance();
  463. $router = $front->getRouter();
  464. $router->addDefaultRoutes();
  465. $router->addRoute(
  466. 'archive',
  467. new Zend_Controller_Router_Route(
  468. '/archive/:year',
  469. array(
  470. 'module' => 'company',
  471. 'controller' => 'news',
  472. 'action' => 'archive',
  473. 'year' => (int) date('Y') - 1
  474. ),
  475. array('year' => '\d+')
  476. )
  477. );
  478. // ACL Setup:
  479. $acl = new Zend_Acl();
  480. $acl->addRole(new Zend_Acl_Role('member'));
  481. $acl->addRole(new Zend_Acl_Role('admin'));
  482. $acl->add(new Zend_Acl_Resource('mvc:admin'));
  483. $acl->add(new Zend_Acl_Resource('mvc:community.account'));
  484. $acl->allow('member', 'mvc:community.account');
  485. $acl->allow('admin', null);
  486. // ACL und Rolle im Proxy Helfer speichern:
  487. $view->navigation()->setAcl($acl)->setRole('member');
  488. // ...oder ein standard ACL und Rolle statisch setzen:
  489. Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl);
  490. Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole('member');
  491. ]]>
  492. </programlisting>
  493. </sect4>
  494. <sect4 id="zend.view.helpers.initial.navigation.breadcrumbs">
  495. <title>Breadcrumbs Helfer</title>
  496. <para>
  497. Breadcrumbs werden verwendet um anzuzeigen wo in einer Sitemap ein Benutzer aktuell
  498. browst, und werden typischerweise wie folgt angezeigt: "Du bist hier: Home > Produkte
  499. > FantastischesProdukt 1.0". Der BreakCrumbs Helfer folgt den Richtlinien von
  500. <ulink url="http://developer.yahoo.com/ypatterns/pattern.php?pattern=breadcrumbs">Breadcrumbs Pattern - Yahoo! Design Pattern Library</ulink>,
  501. und erlaubt eine einfache Anpassung (Minimale/Maximale Tiefe, Einrückung, Trennzeichen,
  502. und ob das letzte Element verlinkt sein soll), oder die Darstellung durch Verwendung
  503. eines partiellen View Skripts.
  504. </para>
  505. <para>
  506. Der Breabcrumbs Helfer funktioniert wie folgt; er findet die tiefste aktive Seite in
  507. einem Navigations Container, und stellt den aufwärtsgerichteten Pfad zum Root dar.
  508. Für MVC Seiten wird die "Aktivität" einer Seite erkannt indem das Anfrage Objekt
  509. angeschaut wird, wie im Kapitel
  510. <link linkend="zend.navigation.pages.mvc">Zend_Navigation_Page_Mvc</link> beschrieben.
  511. </para>
  512. <para>
  513. Der Helfer setzt die Eigenschaft <code>minDepth</code> standardmäßig auf 1, was
  514. bedeutet das Breadcrumbs nicht dargestellt werden wenn die tiefste aktive Seite eine
  515. Root Seite ist. Wenn <code>maxDepth</code> spezifiziert ist, beendet der Helfer die
  516. Darstellung bei der spezifizierten Tiefe (z.B. stopp bei Level 2 selbst wenn die
  517. tiefste aktive Seite auf Level 3 ist).
  518. </para>
  519. <para>
  520. Methoden im Breakcrumbs Helfer sind:
  521. </para>
  522. <itemizedlist>
  523. <listitem>
  524. <para>
  525. <code>{get|set}Separator()</code> empfängt/setzt das Trennzeichen das zwischen
  526. Breakcrumbs verwendet wird. Der Standardwert ist <code>' &amp;gt; '</code>.
  527. </para>
  528. </listitem>
  529. <listitem>
  530. <para>
  531. <code>{get|set}LinkLast()</code> empfängt/setzt ob der letzte Breabcrumb
  532. als Anker dargestellt werden soll oder nicht. Der Standardwert ist
  533. <code>false</code>.
  534. </para>
  535. </listitem>
  536. <listitem>
  537. <para>
  538. <code>{get|set}Partial()</code> empfängt/setzt ein partielles View Skript das
  539. für die Darstellung von Breadcrumbs verwendet werden soll. Wenn ein partielles
  540. View Skript gesetzt ist, verwendet die <code>render()</code> Methode des
  541. Helfers die <code>renderPartial()</code> Methode. Wenn kein partielles gesetzt
  542. ist, wird die <code>renderStraight()</code> Methode verwendet. Der Helfer
  543. erwartet das der partielle ein <code>string</code> oder ein <code>array</code>
  544. mit zwei Elementen ist. Wen der Partielle ein <code>string</code> ist, benennt
  545. er den Namen des partiellen Skripts das zu verwenden ist. Wenn er ein
  546. <code>array</code> ist, wird das erste Element als Name des partiellen View
  547. Skripts verwendet, und das zweite Element ist das Modul in dem das Skript zu
  548. finden ist.
  549. </para>
  550. </listitem>
  551. <listitem>
  552. <para>
  553. <code>renderStraight()</code> ist die standardmäßige render Methode.
  554. </para>
  555. </listitem>
  556. <listitem>
  557. <para>
  558. <code>renderPartial()</code> wird für die Darstellung verwendet wenn ein
  559. partielles View Skript verwendet wird.
  560. </para>
  561. </listitem>
  562. </itemizedlist>
  563. <example id="zend.view.helpers.initial.navigation.breadcrumbs.example1">
  564. <title>Darstellung von Breadcrumbs</title>
  565. <para>
  566. Dieses Beispiel zeigt wie Breadcrumbs mit Standardsettings dargestellt werden.
  567. </para>
  568. <programlisting role="php"><![CDATA[
  569. In einem View Skript oder Layout:
  570. <?php echo $this->navigation()->breadcrumbs(); ?>
  571. oder wenn Short-Tags aktiviert sind:
  572. <?php $this->navigation()->breadcrumbs(); ?>
  573. Die zwei obigen Aufrufe verwenden die magische __toString() Methode,
  574. und sind identisch mit:
  575. <?php echo $this->navigation()->breadcrumbs()->render(); ?>
  576. Ausgabe:
  577. <a href="/products">Produkte</a> &gt; <a href="/products/server">Foo Server</a> &gt; FAQ
  578. ]]>
  579. </programlisting>
  580. </example>
  581. <example id="zend.view.helpers.initial.navigation.breadcrumbs.example2">
  582. <title>Einrückung spezifizieren</title>
  583. <para>
  584. Dieses Beispiel zeigt wie Breadcrumbs mit anfänglicher Einrückung dargestellt
  585. werden können.
  586. </para>
  587. <programlisting role="php"><![CDATA[
  588. Darstellung mit 8 Leerzeichen Einrückung:
  589. <?php echo $this->navigation()->breadcrumbs()->setIndent(8); ?>
  590. Ausgabe:
  591. <a href="/products">Products</a> &gt; <a href="/products/server">Foo Server</a> &gt; FAQ
  592. ]]>
  593. </programlisting>
  594. </example>
  595. <example id="zend.view.helpers.initial.navigation.breadcrumbs.example3">
  596. <title>Eigene Ausgabe für Breakcrumbs</title>
  597. <para>
  598. Dieses Beispiel zeigt wie man eine eigene Breadcrumbs Ausgabe durch die
  599. Spezifizierung diverser Optionen erstellt.
  600. </para>
  601. <programlisting role="php"><![CDATA[
  602. In einem View Skript oder Layout:
  603. <?php
  604. echo $this->navigation()
  605. ->breadcrumbs()
  606. ->setLinkLast(true) // Letzte Seite verlinken
  607. ->setMaxDepth(1) // Bei Level 1 stoppen
  608. ->setSeparator(' &#9654;' . PHP_EOL); // Cooler Seperator mit Umbruch
  609. ?>
  610. Output:
  611. <a href="/products">Produkte</a> &#9654;
  612. <a href="/products/server">Foo Server</a>
  613. /////////////////////////////////////////////////////
  614. Minimale notwendige Tiefe für die Darstellung von Breadcrumbs setzen:
  615. <?php
  616. $this->navigation()->breadcrumbs()->setMinDepth(10);
  617. echo $this->navigation()->breadcrumbs();
  618. ?>
  619. Ausgabe:
  620. Nichts, weil die tiefste aktive Seite nicht auf Level 10 oder tiefer ist.
  621. ]]>
  622. </programlisting>
  623. </example>
  624. <example id="zend.view.helpers.initial.navigation.breadcrumbs.example4">
  625. <title>Darstellung von Breadcrumbs mit Verwendung eines partiellen View Skripts</title>
  626. <para>
  627. Dieses Beispiel zeigt wir eigene Breakcrumbs durch Verwendung eines partiellen
  628. View Skripts dargestellt werden können. Durch den Aufruf von
  629. <code>setPartial()</code> kann man ein partielles View Skript spezifizieren das
  630. verwendet wird wenn die <code>renderPartial()</code> Methode aufgerufen wird.
  631. Diese Methode findest die tiefste aktive Seite und übergibt ein Array von Seiten
  632. die zur aktiven Seite des partiellen View Skripts weiterleitet.
  633. </para>
  634. <para>
  635. Im Layout:
  636. </para>
  637. <programlisting role="php"><![CDATA[
  638. $partial = ;
  639. echo $this->navigation()->breadcrumbs()
  640. ->setPartial(array('breadcrumbs.phtml', 'default'));
  641. ]]>
  642. </programlisting>
  643. <para>
  644. Inhalt von
  645. <code>application/modules/default/views/breadcrumbs.phtml</code>:
  646. </para>
  647. <programlisting role="php"><![CDATA[
  648. echo implode(', ', array_map(
  649. create_function('$a', 'return $a->getLabel();'),
  650. $this->pages));
  651. ]]>
  652. </programlisting>
  653. <para>
  654. Ausgabe:
  655. </para>
  656. <programlisting role="php"><![CDATA[
  657. Produkte, Foo Server, FAQ
  658. ]]>
  659. </programlisting>
  660. </example>
  661. </sect4>
  662. <sect4 id="zend.view.helpers.initial.navigation.links">
  663. <title>Link Helfer</title>
  664. <para>
  665. Der Link Helfer wird für die Darstellung von HTML <code>LINK</code> Elementen
  666. verwendet. Links werden für die Beschreibung von Dokument-Beziehungen der aktuell
  667. aktiven Seite verwendet. Mehr über Links und Linktypen kann unter
  668. <ulink url="http://www.w3.org/TR/html4/struct/links.html#h-12.3">Dokument-Beziehung:
  669. Das LINK Element (HTML4 W3C Rec.)</ulink> und
  670. <ulink url="http://www.w3.org/TR/html4/types.html#h-6.12">Link Typen
  671. (HTML4 W3C Rec.)</ulink> in der HMTL4 W3C Empfehlung nachgelesen werden.
  672. </para>
  673. <para>
  674. Es gibt zwei Typen von Beziehungen; vorwärts und rückwärts, angezeigt durch die
  675. Schlüsselwörter <code>'rel'</code> und <code>'rev'</code>. Die meisten Methoden im
  676. Helfer nehmen einen <code>$rel</code> Parameter entgegen, welcher entweder
  677. <code>'rel'</code> oder <code>'rev'</code> sein muß. Die meisten Methoden nehmen auch
  678. einen <code>$type</code> Parameter entgegen welcher für die Spezifikation des Linktyps
  679. (z.B. alternate, start, next, prev, chapter, usw.) verwendet wird.
  680. </para>
  681. <para>
  682. Beziehungen können dem Seitenobjekt manuell hinzugefügt werden, oder werden durch
  683. das Durchlaufen des Containers, der im Helfer registriert ist, gefunden. Die Methode
  684. <code>findRelation($page, $rel, $type)</code> versucht zuerst den gegebenen
  685. <code>$rel</code> von <code>$type</code> von der <code>$page</code> durch den Aufruf
  686. von <code>$page->findRel($type)</code> oder <code>$page->findRel($type)</code> zu
  687. finden. Wenn <code>$page</code> eine Beziehung hat die zu der Instanz einer Seite
  688. konvertiert werden kann, wird diese Beziehung verwendet. Wenn die Instanz von
  689. <code>$page</code> keinen <code>$type</code> spezifiziert hat, schaut der Helfer nach
  690. einer Methode im Helfer die <code>search$rel$type</code> heißt (z.B.
  691. <code>searchRelNext()</code> oder <code>searchRevAlternate()</code>). Wenn so eine
  692. Methode existiert, wird Sie für die Erkennung der Beziehung der <code>$page</code>
  693. verwendet indem der Container durchlaufen wird.
  694. </para>
  695. <para>
  696. Nicht alle Beziehungen können durch das Durchlaufen des Containers erkannt werden.
  697. Das sind die Beziehungen die durch eine Suche gefunden werden können:
  698. <itemizedlist>
  699. <listitem>
  700. <para>
  701. <code>searchRelStart()</code>, Vorwärts Beziehung 'start': Die erste
  702. Seite im Container.
  703. </para>
  704. </listitem>
  705. <listitem>
  706. <para>
  707. <code>searchRelNext()</code>, Vorwärts Beziehung 'next'; findet die
  708. nächste Seite im Container, z.B. die Seite nach der aktiven Seite.
  709. </para>
  710. </listitem>
  711. <listitem>
  712. <para>
  713. <code>searchRelPrev()</code>, Vorwärts Beziehung 'prev'; findet die
  714. vorhergehende Seite, z.B. die Seite vor der aktiven Seite.
  715. </para>
  716. </listitem>
  717. <listitem>
  718. <para>
  719. <code>searchRelChapter()</code>, Vorwärts Beziehung 'chapter'; findet
  720. alle Seiten auf Level 0 ausser der 'start' Beziehung oder der aktiven
  721. Seite wenn diese auf Level 0 ist.
  722. </para>
  723. </listitem>
  724. <listitem>
  725. <para>
  726. <code>searchRelSection()</code>, Vorwärts Beziehung 'section'; findet
  727. alle Kind-Seiten der aktiven Seite wenn die aktive Seite auf Level 0
  728. ist (ein 'chapter').
  729. </para>
  730. </listitem>
  731. <listitem>
  732. <para>
  733. <code>searchRelSubsection()</code>, Vorwärts Beziehung 'subsection';
  734. findet alle Kind-Seiten der aktiven Seite wenn die aktive Seite auf
  735. Level 1 sind (ein 'section').
  736. </para>
  737. </listitem>
  738. <listitem>
  739. <para>
  740. <code>searchRevSection()</code>, Rückwärts Beziehung 'section'; findet
  741. den Elternteil der aktiven Seite wenn die aktive Seite auf Level 1 ist
  742. (ein 'section').
  743. </para>
  744. </listitem>
  745. <listitem>
  746. <para>
  747. <code>searchRevSubsection()</code>, Rückwärts Beziehung 'subsection';
  748. findet den Elternteil der aktiven Seite wenn die aktive Seite auf Level
  749. 2 ist (ein 'subsection').
  750. </para>
  751. </listitem>
  752. </itemizedlist>
  753. </para>
  754. <note>
  755. <para>
  756. Wenn in der Instanz der Seite nach Beziehungen gesehen wird (
  757. (<code>$page->getRel($type)</code> oder <code>$page->getRev($type)</code>),
  758. akzeptiert der Helfer Wert vom Typ <code>string</code>, <code>array</code>,
  759. <classname>Zend_Config</classname>, oder
  760. <classname>Zend_Navigation_Page</classname>. Wenn ein String gefunden wird, wird
  761. dieser zu einer <classname>Zend_Navigation_Page_Uri</classname> konvertiert. Wenn
  762. ein Array oder eine Config gefunden wird, wird diese in ein oder mehrere
  763. Seiteninstanzen konvertiert, und jedes Element wird an die
  764. <link linkend="zend.navigation.pages.factory">Seiten Factory</link> übergeben.
  765. Wenn der erste Schlüssel nicht nummerische ist, wird das Array/Config direkt an die
  766. Seiten Factory übergeben, und eine einzelne Seite wird retourniert.
  767. </para>
  768. </note>
  769. <para>
  770. Der Helfer unterstützt auch magische Methoden für das Finden von Beziehungen. Um z.B.
  771. alternative vorwärts Beziehungen zu finden muß
  772. <code>$helper->findRelAlternate($page)</code> aufgerufen werden, und um rückwärts
  773. gerichtete Kapitel Beziehungen zu finden <code>$helper->findRevSection($page)</code>.
  774. Diese Aufrufe korrespondieren mit <code>$helper->findRelation($page, 'rel',
  775. 'alternate');</code> und <code>$helper->findRelation($page, 'rev', 'section');</code>.
  776. </para>
  777. <para>
  778. Um zu Steuern welche Beziehung dargestellt werden soll, verwendet der Helfer ein render
  779. Flag. Das render Flag ist ein Integer Wert, und kann in
  780. <ulink url="http://php.net/manual/en/language.operators.bitwise.php">binären
  781. <code>und</code> (<code>&amp;</code>) Operationen</ulink> mit den render Konstanten des
  782. Helfers verwendet werden um festzustellen ob die Beziehung zu der die render Konstante
  783. gehört, dargestellt werden soll.
  784. </para>
  785. <para>
  786. Siehe das <link linkend="zend.view.helpers.initial.navigation.links.example3">folgende
  787. Beispiel</link> für weitere Informationen.
  788. </para>
  789. <para>
  790. <itemizedlist>
  791. <listitem>
  792. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_ALTERNATE</classname></para>
  793. </listitem>
  794. <listitem>
  795. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_STYLESHEET</classname></para>
  796. </listitem>
  797. <listitem>
  798. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_START</classname></para>
  799. </listitem>
  800. <listitem>
  801. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_NEXT</classname></para>
  802. </listitem>
  803. <listitem>
  804. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_PREV</classname></para>
  805. </listitem>
  806. <listitem>
  807. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_CONTENTS</classname></para>
  808. </listitem>
  809. <listitem>
  810. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_INDEX</classname></para>
  811. </listitem>
  812. <listitem>
  813. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_GLOSSARY</classname></para>
  814. </listitem>
  815. <listitem>
  816. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_COPYRIGHT</classname></para>
  817. </listitem>
  818. <listitem>
  819. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_CHAPTER</classname></para>
  820. </listitem>
  821. <listitem>
  822. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_SECTION</classname></para>
  823. </listitem>
  824. <listitem>
  825. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_SUBSECTION</classname></para>
  826. </listitem>
  827. <listitem>
  828. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_APPENDIX</classname></para>
  829. </listitem>
  830. <listitem>
  831. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_HELP</classname></para>
  832. </listitem>
  833. <listitem>
  834. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_BOOKMARK</classname></para>
  835. </listitem>
  836. <listitem>
  837. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_CUSTOM</classname></para>
  838. </listitem>
  839. <listitem>
  840. <para><classname>Zend_View_Helper_Navigation_Link::RENDER_ALL</classname></para>
  841. </listitem>
  842. </itemizedlist>
  843. </para>
  844. <para>
  845. Die Konstanten von <code>RENDER_ALTERNATE</code> bis <code>RENDER_BOOKMARK</code>
  846. stellen standardmäßige HTML Linktypen dar. <code>RENDER_CUSTOM</code> stellt eine
  847. nicht-standardmäßige Beziehung dar die in der Seite spezifiziert ist.
  848. <code>RENDER_ALL</code> stellt standardmäßige und nicht-standardmäßige Beziehungen dar.
  849. </para>
  850. <para>
  851. Methoden im Link Helfer:
  852. </para>
  853. <itemizedlist>
  854. <listitem>
  855. <para>
  856. <code>{get|set}RenderFlag()</code> empfängt/setzt das render Flag.
  857. Standardwert ist <code>RENDER_ALL</code>. Siehe das folgende Beispiel dafür
  858. wie das render Flag zu setzen ist.
  859. </para>
  860. </listitem>
  861. <listitem>
  862. <para>
  863. <code>findAllRelations()</code> findet alle Beziehungen von allen Typen
  864. einer angegebenen Seite.
  865. </para>
  866. </listitem>
  867. <listitem>
  868. <para>
  869. <code>findRelation()</code> findet alle Beziehungen eines angegebenen Typs
  870. einer angegebenen Seite.
  871. </para>
  872. </listitem>
  873. <listitem>
  874. <para>
  875. <code>searchRel{Start|Next|Prev|Chapter|Section|Subsection}()</code>
  876. durchsucht einen Container um vorwärtsgerichtete Beziehungen zu Startseite,
  877. nächster Seite, voriger Seite, Kapitel, Sektion und Untersektion zu finden.
  878. </para>
  879. </listitem>
  880. <listitem>
  881. <para>
  882. <code>searchRev{Section|Subsection}()</code> durchsucht einen Container um
  883. rückwärtsgerichtete Beziehungen zu Sektionen oder Untersektionen zu finden.
  884. </para>
  885. </listitem>
  886. <listitem>
  887. <para>
  888. <code>renderLink()</code> stellt ein einzelnes <code>link</code> Element dar.
  889. </para>
  890. </listitem>
  891. </itemizedlist>
  892. <example id="zend.view.helpers.initial.navigation.links.example1">
  893. <title>Beziehungen in Seiten spezifizieren</title>
  894. <para>
  895. Dieses Beispiel zeigt wir Beziehungen in Seiten spezifiziert werden können.
  896. </para>
  897. <programlisting role="php"><![CDATA[
  898. $container = new Zend_Navigation(array(
  899. array(
  900. 'label' => 'Strings für Beziehungen verwenden',
  901. 'rel' => array(
  902. 'alternate' => 'http://www.example.org/'
  903. ),
  904. 'rev' => array(
  905. 'alternate' => 'http://www.example.net/'
  906. )
  907. ),
  908. array(
  909. 'label' => 'Arrays für Beziehungen verwenden',
  910. 'rel' => array(
  911. 'alternate' => array(
  912. 'label' => 'Example.org',
  913. 'uri' => 'http://www.example.org/'
  914. )
  915. )
  916. ),
  917. array(
  918. 'label' => 'Konfigurationen für Beziehungen verwenden',
  919. 'rel' => array(
  920. 'alternate' => new Zend_Config(array(
  921. 'label' => 'Example.org',
  922. 'uri' => 'http://www.example.org/'
  923. ))
  924. )
  925. ),
  926. array(
  927. 'label' => 'Instanzen von Seiten für Beziehungen verwenden',
  928. 'rel' => array(
  929. 'alternate' => Zend_Navigation_Page::factory(array(
  930. 'label' => 'Example.org',
  931. 'uri' => 'http://www.example.org/'
  932. ))
  933. )
  934. )
  935. ));
  936. ]]>
  937. </programlisting>
  938. </example>
  939. <example id="zend.view.helpers.initial.navigation.links.example2">
  940. <title>Standardmäßige Darstellung von Links</title>
  941. <para>
  942. Dieses Beispiel zeigt wie ein Menü von einem Container dargestellt wird, der im
  943. View Helfer registriert/gefunden wurde.
  944. </para>
  945. <programlisting role="php"><![CDATA[
  946. Im View Skript oder Layout:
  947. <?php echo $this->view->navigation()->links(); ?>
  948. Ausgabe:
  949. <link rel="alternate" href="/products/server/faq/format/xml">
  950. <link rel="start" href="/" title="Home">
  951. <link rel="next" href="/products/server/editions" title="Editionen">
  952. <link rel="prev" href="/products/server" title="Foo Server">
  953. <link rel="chapter" href="/products" title="Produkte">
  954. <link rel="chapter" href="/company/about" title="Firma">
  955. <link rel="chapter" href="/community" title="Community">
  956. <link rel="canonical" href="http://www.example.com/?page=server-faq">
  957. <link rev="subsection" href="/products/server" title="Foo Server">
  958. ]]>
  959. </programlisting>
  960. </example>
  961. <example id="zend.view.helpers.initial.navigation.links.example3">
  962. <title>Spezifizieren welche Beziehungen dargestellt werden sollen</title>
  963. <para>
  964. Dieses Beispiel zeigt wie spezifiziert werden kann, welche Beziehungen zu finden
  965. und darzustellen sind.
  966. </para>
  967. <programlisting role="php"><![CDATA[
  968. Nur start, next und prev darstellen:
  969. $helper->setRenderFlag(Zend_View_Helper_Navigation_Links::RENDER_START |
  970. Zend_View_Helper_Navigation_Links::RENDER_NEXT |
  971. Zend_View_Helper_Navigation_Links::RENDER_PREV);
  972. Ausgabe:
  973. <link rel="start" href="/" title="Home">
  974. <link rel="next" href="/products/server/editions" title="Editionen">
  975. <link rel="prev" href="/products/server" title="Foo Server">
  976. ]]>
  977. </programlisting>
  978. <programlisting role="php"><![CDATA[
  979. Nur native Linktypen darstellen:
  980. $helper->setRenderFlag(Zend_View_Helper_Navigation_Links::RENDER_ALL ^
  981. Zend_View_Helper_Navigation_Links::RENDER_CUSTOM);
  982. Ausgabe:
  983. <link rel="alternate" href="/products/server/faq/format/xml">
  984. <link rel="start" href="/" title="Home">
  985. <link rel="next" href="/products/server/editions" title="Editionen">
  986. <link rel="prev" href="/products/server" title="Foo Server">
  987. <link rel="chapter" href="/products" title="Produkte">
  988. <link rel="chapter" href="/company/about" title="Firma">
  989. <link rel="chapter" href="/community" title="Community">
  990. <link rev="subsection" href="/products/server" title="Foo Server">
  991. ]]>
  992. </programlisting>
  993. <programlisting role="php"><![CDATA[
  994. Alles ausser Kapitel darstellen:
  995. $helper->setRenderFlag(Zend_View_Helper_Navigation_Links::RENDER_ALL ^
  996. Zend_View_Helper_Navigation_Links::RENDER_CHAPTER);
  997. Ausgabe:
  998. <link rel="alternate" href="/products/server/faq/format/xml">
  999. <link rel="start" href="/" title="Home">
  1000. <link rel="next" href="/products/server/editions" title="Editionen">
  1001. <link rel="prev" href="/products/server" title="Foo Server">
  1002. <link rel="canonical" href="http://www.example.com/?page=server-faq">
  1003. <link rev="subsection" href="/products/server" title="Foo Server">
  1004. ]]>
  1005. </programlisting>
  1006. </example>
  1007. </sect4>
  1008. <sect4 id="zend.view.helpers.initial.navigation.menu">
  1009. <title>Menu Helfer</title>
  1010. <para>
  1011. Der Menu Helfer wird für die Darstellung von Menüs aus Navigations Containern
  1012. verwendet. Standardmäßig wird das Menü durch Verwendung der HTML Tags
  1013. <code>UL</code> und <code>LI</code> dargestellt. Der Helfer erlaubt aber auch
  1014. die Verwendung eines partiellen View Skripts.
  1015. </para>
  1016. <para>
  1017. Methoden im Menu Helfer:
  1018. </para>
  1019. <itemizedlist>
  1020. <listitem>
  1021. <para>
  1022. <code>{get|set}UlClass()</code> empfängt/setzt die CSS Klasse zur Verwendung
  1023. in <code>renderMenu()</code>.
  1024. </para>
  1025. </listitem>
  1026. <listitem>
  1027. <para>
  1028. <code>{get|set}OnlyActiveBranch()</code> empfängt/setzt ein Flag das
  1029. spezifiziert ob der aktive Zweig eines Containers dargestellt werden soll.
  1030. </para>
  1031. </listitem>
  1032. <listitem>
  1033. <para>
  1034. <code>{get|set}RenderParents()</code> empfängt/setzt ein Flag das
  1035. spezifiziert ob Eltern nur dargestellt werden sollen wenn nur der aktive
  1036. Zweig eines Containers dargestellt wird. Wenn es auf <code>false</code>
  1037. gesetzt wird, wird nur das tiefste aktive Menü dargestellt.
  1038. </para>
  1039. </listitem>
  1040. <listitem>
  1041. <para>
  1042. <code>{get|set}Partial()</code> empfängt/setzt ein partielles View Skript
  1043. das für die Darstellung des Menüs verwendet werden soll. Wenn ein partielles
  1044. Skript gesetzt ist, verwendet die <code>render()</code> Methode des Helfers
  1045. die <code>renderPartial()</code> Methode. Wenn kein Partieller gesetzt ist,
  1046. wird die <code>renderMenu()</code> Methode verwendet. Der Helfer erwartet das
  1047. der Partielle ein <code>string</code>, oder ein <code>array</code> mit zwei
  1048. Elementen, ist. Wenn der Partielle ein <code>string</code> ist bezeichnet er
  1049. den Namen des partiellen Skripts das zu verwenden ist. Wenn er ein
  1050. <code>array</code> ist wird das erste Element als Name des partiellen View
  1051. Skripts verwendet, und das zweite Element ist das Modul indem das Skript
  1052. gefunden wird.
  1053. </para>
  1054. </listitem>
  1055. <listitem>
  1056. <para>
  1057. <code>htmlify()</code> überschreibt die Methode der abstrakten Klasse damit
  1058. <code>span</code> Elemente zurückgegeben werden wenn die Seite kein
  1059. <code>href</code> hat.
  1060. </para>
  1061. </listitem>
  1062. <listitem>
  1063. <para>
  1064. <code>renderMenu($container = null, $options = array())</code> ist eine
  1065. standardmäßige render Methode, und stellt einen Container als HTML
  1066. <code>UL</code> Liste dar.
  1067. </para>
  1068. <para>
  1069. Wenn <code>$container</code> nicht angegeben wird, wird der Container der
  1070. im Helfer registriert ist dargestellt.
  1071. </para>
  1072. <para>
  1073. <code>$options</code> wird verwendet um temporär spezifizierte Optionen zu
  1074. überschreiben ohne das die Werte in der Helferinstanz resetiert werden. Es
  1075. ist ein assoziatives Array wobei jeder Schlüssel mit einer Option im Helfer
  1076. korrespondiert.
  1077. </para>
  1078. <para>
  1079. Erkannte Optionen:
  1080. <itemizedlist>
  1081. <listitem>
  1082. <para>
  1083. <code>indent</code>; Einrückung. Erwartet einen <code>string</code>
  1084. oder einen <code>int</code> Wert.
  1085. </para>
  1086. </listitem>
  1087. <listitem>
  1088. <para>
  1089. <code>minDepth</code>; Minimale Tiefe. Erwartet ein
  1090. <code>int</code> oder <code>null</code> (keine minimale Tiefe).
  1091. </para>
  1092. </listitem>
  1093. <listitem>
  1094. <para>
  1095. <code>maxDepth</code>; Maximale Tiefe. Erwartet ein
  1096. <code>int</code> oder <code>null</code> (keine maximale Tiefe).
  1097. </para>
  1098. </listitem>
  1099. <listitem>
  1100. <para>
  1101. <code>ulClass</code>; CSS Klasse für das <code>ul</code> Element.
  1102. Erwartet einen <code>string</code>.
  1103. </para>
  1104. </listitem>
  1105. <listitem>
  1106. <para>
  1107. <code>onlyActiveBranch</code>; Ob nur der aktive Branch dargestellt
  1108. werden soll. Erwartet einen <code>boolean</code> Wert.
  1109. </para>
  1110. </listitem>
  1111. <listitem>
  1112. <para>
  1113. <code>renderParents</code>; Ob eltern dargestellt werden sollen
  1114. wenn nur der aktive Branch dargestellt wird. Erwartet einen
  1115. <code>boolean</code> Wert.
  1116. </para>
  1117. </listitem>
  1118. </itemizedlist>
  1119. </para>
  1120. <para>
  1121. Wenn keine Option angegeben wird, werden die Werte die im Helfer gesetzt
  1122. sind verwendet.
  1123. </para>
  1124. </listitem>
  1125. <listitem>
  1126. <para>
  1127. <code>renderPartial()</code> wird für die Darstellung des Menüs in einem
  1128. partiellen View Skript verwendet.
  1129. </para>
  1130. </listitem>
  1131. <listitem>
  1132. <para>
  1133. <code>renderSubMenu()</code> stellt das tiefste Menü Level des aktiven
  1134. Branches eines Containers dar.
  1135. </para>
  1136. </listitem>
  1137. </itemizedlist>
  1138. <example id="zend.view.helpers.initial.navigation.menu.example1">
  1139. <title>Darstellung eines Menüs</title>
  1140. <para>
  1141. Dieses Beispiel zeigt wie ein Menü von einem registrierten/im View Helfer
  1142. gefundenen Container, dargestellt wird. Es ist zu beachten das Seiten basierend
  1143. auf Ihrer Sichtbarkeit und ACL ausgefiltert werden.
  1144. </para>
  1145. <programlisting role="php"><![CDATA[
  1146. In einem View Skript oder Layout:
  1147. <?php echo $this->navigation()->menu()->render() ?>
  1148. Oder einfach:
  1149. <?php echo $this->navigation()->menu() ?>
  1150. Oder wenn Short Tags aktiviert sind:
  1151. <?= $this->navigation()->menu() ?>
  1152. Ausgabe:
  1153. <ul class="navigation">
  1154. <li>
  1155. <a title="Geh zu Home" href="/">Home</a>
  1156. </li>
  1157. <li class="active">
  1158. <a href="/products">Produkte</a>
  1159. <ul>
  1160. <li class="active">
  1161. <a href="/products/server">Foo Server</a>
  1162. <ul>
  1163. <li class="active">
  1164. <a href="/products/server/faq">FAQ</a>
  1165. </li>
  1166. <li>
  1167. <a href="/products/server/editions">Editionen</a>
  1168. </li>
  1169. <li>
  1170. <a href="/products/server/requirements">System Anforderungen</a>
  1171. </li>
  1172. </ul>
  1173. </li>
  1174. <li>
  1175. <a href="/products/studio">Foo Studio</a>
  1176. <ul>
  1177. <li>
  1178. <a href="/products/studio/customers">Kunden Stories</a>
  1179. </li>
  1180. <li>
  1181. <a href="/prodcts/studio/support">Support</a>
  1182. </li>
  1183. </ul>
  1184. </li>
  1185. </ul>
  1186. </li>
  1187. <li>
  1188. <a title="About us" href="/company/about">Firma</a>
  1189. <ul>
  1190. <li>
  1191. <a href="/company/about/investors">Investor Relations</a>
  1192. </li>
  1193. <li>
  1194. <a class="rss" href="/company/news">News</a>
  1195. <ul>
  1196. <li>
  1197. <a href="/company/news/press">Für die Presse</a>
  1198. </li>
  1199. <li>
  1200. <a href="/archive">Archiv</a>
  1201. </li>
  1202. </ul>
  1203. </li>
  1204. </ul>
  1205. </li>
  1206. <li>
  1207. <a href="/community">Community</a>
  1208. <ul>
  1209. <li>
  1210. <a href="/community/account">Mein Account</a>
  1211. </li>
  1212. <li>
  1213. <a class="external" href="http://forums.example.com/">Forums</a>
  1214. </li>
  1215. </ul>
  1216. </li>
  1217. </ul>
  1218. ]]>
  1219. </programlisting>
  1220. </example>
  1221. <example id="zend.view.helpers.initial.navigation.menu.example2">
  1222. <title><code>renderMenu()</code> direkt aufrufen</title>
  1223. <para>
  1224. Dieses Beispiel zeigt wie ein Menü dargestellt werden kann das nicht im View
  1225. Helfer registriert ist, indem <code>renderMenu()</code> direkt aufgerufen wird
  1226. und ein paar wenige Optionen spezifiziert werden.
  1227. </para>
  1228. <programlisting role="php"><![CDATA[
  1229. <?php
  1230. // Nur das 'Community' Menü darstellen
  1231. $community = $this->navigation()->findOneByLabel('Community');
  1232. $options = array(
  1233. 'indent' => 16,
  1234. 'ulClass' => 'community'
  1235. );
  1236. echo $this->navigation()
  1237. ->menu()
  1238. ->renderMenu($community, $options);
  1239. ?>
  1240. Output:
  1241. <ul class="community">
  1242. <li>
  1243. <a href="/community/account">Mein Account</a>
  1244. </li>
  1245. <li>
  1246. <a class="external" href="http://forums.example.com/">Forums</a>
  1247. </li>
  1248. </ul>
  1249. ]]>
  1250. </programlisting>
  1251. </example>
  1252. <example id="zend.view.helpers.initial.navigation.menu.example3">
  1253. <title>Das tiefste aktive Menü darstellen</title>
  1254. <para>
  1255. Dieses Beispiel zeigt wie <code>renderSubMenu()</code> das tiefste Untermenü
  1256. des aktiven Branches dargestellt wird.
  1257. </para>
  1258. <para>
  1259. Der Aufruf von <code>renderSubMenu($container, $ulClass, $indent)</code> ist
  1260. identisch mit dem Aufruf von <code>renderMenu($container, $options)</code> mit
  1261. den folgenden Optionen:
  1262. <code>array(
  1263. 'ulClass' => $ulClass,
  1264. 'indent' => $indent,
  1265. 'minDepth' => null,
  1266. 'maxDepth' => null,
  1267. 'onlyActiveBranch' => true,
  1268. 'renderParents' => false
  1269. )</code>
  1270. </para>
  1271. <programlisting role="php"><![CDATA[
  1272. <?php
  1273. echo $this->navigation()
  1274. ->menu()
  1275. ->renderSubMenu(null, 'sidebar', 4);
  1276. ?>
  1277. Die Ausgabe ist die gleiche wenn 'FAQ' oder 'Foo Server' aktiv sind:
  1278. <ul class="sidebar">
  1279. <li class="active">
  1280. <a href="/products/server/faq">FAQ</a>
  1281. </li>
  1282. <li>
  1283. <a href="/products/server/editions">Editionen</a>
  1284. </li>
  1285. <li>
  1286. <a href="/products/server/requirements">System Anforderungen</a>
  1287. </li>
  1288. </ul>
  1289. ]]>
  1290. </programlisting>
  1291. </example>
  1292. <example id="zend.view.helpers.initial.navigation.menu.example4">
  1293. <title>Darstellung eines Menüs mit maximaler Tiefe</title>
  1294. <programlisting role="php"><![CDATA[
  1295. <?php
  1296. echo $this->navigation()
  1297. ->menu()
  1298. ->setMaxDepth(1);
  1299. ?>
  1300. Ausgabe:
  1301. <ul class="navigation">
  1302. <li>
  1303. <a title="Geh zu Home" href="/">Home</a>
  1304. </li>
  1305. <li class="active">
  1306. <a href="/products">Produkte</a>
  1307. <ul>
  1308. <li class="active">
  1309. <a href="/products/server">Foo Server</a>
  1310. </li>
  1311. <li>
  1312. <a href="/products/studio">Foo Studio</a>
  1313. </li>
  1314. </ul>
  1315. </li>
  1316. <li>
  1317. <a title="About us" href="/company/about">Firma</a>
  1318. <ul>
  1319. <li>
  1320. <a href="/company/about/investors">Investor Relations</a>
  1321. </li>
  1322. <li>
  1323. <a class="rss" href="/company/news">News</a>
  1324. </li>
  1325. </ul>
  1326. </li>
  1327. <li>
  1328. <a href="/community">Community</a>
  1329. <ul>
  1330. <li>
  1331. <a href="/community/account">Mein Account</a>
  1332. </li>
  1333. <li>
  1334. <a class="external" href="http://forums.example.com/">Forums</a>
  1335. </li>
  1336. </ul>
  1337. </li>
  1338. </ul>
  1339. ]]>
  1340. </programlisting>
  1341. </example>
  1342. <example id="zend.view.helpers.initial.navigation.menu.example5">
  1343. <title>Darstellung eines Menüs mit minimaler Tiefe</title>
  1344. <programlisting role="php"><![CDATA[
  1345. <?php
  1346. echo $this->navigation()
  1347. ->menu()
  1348. ->setMinDepth(1);
  1349. ?>
  1350. Ausgabe:
  1351. <ul class="navigation">
  1352. <li class="active">
  1353. <a href="/products/server">Foo Server</a>
  1354. <ul>
  1355. <li class="active">
  1356. <a href="/products/server/faq">FAQ</a>
  1357. </li>
  1358. <li>
  1359. <a href="/products/server/editions">Editionen</a>
  1360. </li>
  1361. <li>
  1362. <a href="/products/server/requirements">System Anforderungen</a>
  1363. </li>
  1364. </ul>
  1365. </li>
  1366. <li>
  1367. <a href="/products/studio">Foo Studio</a>
  1368. <ul>
  1369. <li>
  1370. <a href="/products/studio/customers">Kunden Stories</a>
  1371. </li>
  1372. <li>
  1373. <a href="/prodcts/studio/support">Support</a>
  1374. </li>
  1375. </ul>
  1376. </li>
  1377. <li>
  1378. <a href="/company/about/investors">Investor Relations</a>
  1379. </li>
  1380. <li>
  1381. <a class="rss" href="/company/news">News</a>
  1382. <ul>
  1383. <li>
  1384. <a href="/company/news/press">Für die Presse</a>
  1385. </li>
  1386. <li>
  1387. <a href="/archive">Archiv</a>
  1388. </li>
  1389. </ul>
  1390. </li>
  1391. <li>
  1392. <a href="/community/account">Mein Account</a>
  1393. </li>
  1394. <li>
  1395. <a class="external" href="http://forums.example.com/">Forums</a>
  1396. </li>
  1397. </ul>
  1398. ]]>
  1399. </programlisting>
  1400. </example>
  1401. <example id="zend.view.helpers.initial.navigation.menu.example6">
  1402. <title>Nur den aktiven Branch eines Menüs darstellen</title>
  1403. <programlisting role="php"><![CDATA[
  1404. <?php
  1405. echo $this->navigation()
  1406. ->menu()
  1407. ->setOnlyActiveBranch(true);
  1408. ?>
  1409. Ausgabe:
  1410. <ul class="navigation">
  1411. <li class="active">
  1412. <a href="/products">Produkte</a>
  1413. <ul>
  1414. <li class="active">
  1415. <a href="/products/server">Foo Server</a>
  1416. <ul>
  1417. <li class="active">
  1418. <a href="/products/server/faq">FAQ</a>
  1419. </li>
  1420. <li>
  1421. <a href="/products/server/editions">Editionen</a>
  1422. </li>
  1423. <li>
  1424. <a href="/products/server/requirements">System Anforderungen</a>
  1425. </li>
  1426. </ul>
  1427. </li>
  1428. </ul>
  1429. </li>
  1430. </ul>
  1431. ]]>
  1432. </programlisting>
  1433. </example>
  1434. <example id="zend.view.helpers.initial.navigation.menu.example7">
  1435. <title>
  1436. Nur den aktiven Branch eines Menüs mit minimaler Tiefe darstellen
  1437. </title>
  1438. <programlisting role="php"><![CDATA[
  1439. <?php
  1440. echo $this->navigation()
  1441. ->menu()
  1442. ->setOnlyActiveBranch(true)
  1443. ->setMinDepth(1);
  1444. ?>
  1445. Ausgabe:
  1446. <ul class="navigation">
  1447. <li class="active">
  1448. <a href="/products/server">Foo Server</a>
  1449. <ul>
  1450. <li class="active">
  1451. <a href="/products/server/faq">FAQ</a>
  1452. </li>
  1453. <li>
  1454. <a href="/products/server/editions">Editionen</a>
  1455. </li>
  1456. <li>
  1457. <a href="/products/server/requirements">System Anforderungen</a>
  1458. </li>
  1459. </ul>
  1460. </li>
  1461. </ul>
  1462. ]]>
  1463. </programlisting>
  1464. </example>
  1465. <example id="zend.view.helpers.initial.navigation.menu.example8">
  1466. <title>
  1467. Nur den aktiven Branch eines Menüs mit maximaler Tiefe darstellen
  1468. </title>
  1469. <programlisting role="php"><![CDATA[
  1470. <?php
  1471. echo $this->navigation()
  1472. ->menu()
  1473. ->setOnlyActiveBranch(true)
  1474. ->setMaxDepth(1);
  1475. ?>
  1476. Ausgabe:
  1477. <ul class="navigation">
  1478. <li class="active">
  1479. <a href="/products">Produkte</a>
  1480. <ul>
  1481. <li class="active">
  1482. <a href="/products/server">Foo Server</a>
  1483. </li>
  1484. <li>
  1485. <a href="/products/studio">Foo Studio</a>
  1486. </li>
  1487. </ul>
  1488. </li>
  1489. </ul>
  1490. ]]>
  1491. </programlisting>
  1492. </example>
  1493. <example id="zend.view.helpers.initial.navigation.menu.example9">
  1494. <title>
  1495. Nur den aktiven Branch eines Menüs mit maximaler Tiefe aber ohne Eltern darstellen
  1496. </title>
  1497. <para>
  1498. </para>
  1499. <programlisting role="php"><![CDATA[
  1500. <?php
  1501. echo $this->navigation()
  1502. ->menu()
  1503. ->setOnlyActiveBranch(true)
  1504. ->setRenderParents(false)
  1505. ->setMaxDepth(1);
  1506. ?>
  1507. Ausgabe:
  1508. <ul class="navigation">
  1509. <li class="active">
  1510. <a href="/products/server">Foo Server</a>
  1511. </li>
  1512. <li>
  1513. <a href="/products/studio">Foo Studio</a>
  1514. </li>
  1515. </ul>
  1516. ]]>
  1517. </programlisting>
  1518. </example>
  1519. <example id="zend.view.helpers.initial.navigation.menu.example10">
  1520. <title>
  1521. Darstellen eines eigenen Menüs durch Verwendung eines partiellen View Skripts
  1522. </title>
  1523. <para>
  1524. Dieses Beispiel zeigt wie ein eigenes Menü, durch Verwendung eines partiellen View
  1525. Skripts, dargestellt werden kann. Durch Aufruf von <code>setPartial()</code> kann
  1526. ein partielles View Skript spezifiziert werden das verwendet wird wenn man
  1527. <code>render()</code> aufruft. Wenn ein Partielles spezifiziert ist, wird die
  1528. <code>renderPartial()</code> Methode aufgerufen. Diese Methode fügt den Container
  1529. in die View ein, und verwendet hierbei den Schlüssel <code>container</code>.
  1530. </para>
  1531. <para>In a layout:</para>
  1532. <programlisting role="php"><![CDATA[
  1533. $partial = array('menu.phtml', 'default');
  1534. $this->navigation()->menu()->setPartial($partial);
  1535. echo $this->navigation()->menu()->render();
  1536. ]]>
  1537. </programlisting>
  1538. <para>In application/modules/default/views/menu.phtml:</para>
  1539. <programlisting role="php"><![CDATA[
  1540. foreach ($this->container as $page) {
  1541. echo $this->menu()->htmlify($page), PHP_EOL;
  1542. }
  1543. ]]>
  1544. </programlisting>
  1545. <para>Ausgabe:</para>
  1546. <programlisting role="php"><![CDATA[
  1547. <a title="Geh zu Home" href="/">Home</a>
  1548. <a href="/products">Produkte</a>
  1549. <a title="About us" href="/company/about">Firma</a>
  1550. <a href="/community">Community</a>
  1551. ]]>
  1552. </programlisting>
  1553. </example>
  1554. </sect4>
  1555. <sect4 id="zend.view.helpers.initial.navigation.sitemap">
  1556. <title>Sitemap Helfer</title>
  1557. <para>
  1558. Der Sitemap Helfer wird für die Erzeugung von XML Sitemaps verwendet wie im
  1559. <ulink url="http://www.sitemaps.org/protocol.php">Sitemaps XML Format</ulink>
  1560. definiert. Mehr darüber kann unter <ulink url="http://en.wikipedia.org/wiki/Sitemaps">
  1561. Sitemaps in Wikipedia</ulink> nachgelesen werden.
  1562. </para>
  1563. <para>
  1564. Standardmäßig verwendet der Sitemap Helfer
  1565. <link linkend="zend.validate.sitemap">Sitemap Prüfungen</link> um jedes Element zu
  1566. prüfen das dargestellt werden soll. Das kann deaktiviert werden indem man
  1567. <code>$helper->setUseSitemapValidators(false)</code> aufruft.
  1568. <note>
  1569. <para>
  1570. Wenn man die Sitemap Prüfungen deaktiviert, werden die eigenen Eigenschaften
  1571. (siehe Tabelle) nicht geprüft.
  1572. </para>
  1573. </note>
  1574. </para>
  1575. <para>
  1576. Der Sitemap Helfer unterstützt auch die Pürfung von
  1577. <ulink url="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">Sitemap XSD
  1578. Schemas</ulink> der erzeugten Sitemap. Das ist standardmäßig deaktiviert, da es eine
  1579. Anfrage auf die Schema Datei benötigt. Es kann mit
  1580. <code>$helper->setUseSchemaValidation(true)</code> aktiviert werden.
  1581. </para>
  1582. <table id="zend.view.helpers.initial.navigation.sitemap.elements">
  1583. <title>Sitemap XML Elemente</title>
  1584. <tgroup cols="2">
  1585. <thead>
  1586. <row>
  1587. <entry>Element</entry>
  1588. <entry>Beschreibung</entry>
  1589. </row>
  1590. </thead>
  1591. <tbody>
  1592. <row>
  1593. <entry><code>loc</code></entry>
  1594. <entry>
  1595. Absolute UTL zur Seite. Eine absolute URL wird vom Helfer erzeugt.
  1596. </entry>
  1597. </row>
  1598. <row>
  1599. <entry><code>lastmod</code></entry>
  1600. <entry>
  1601. <para>
  1602. Das Datum der letzten Änderung der Datei, im
  1603. <ulink url="http://www.w3.org/TR/NOTE-datetime">W3C
  1604. Datetime</ulink> Format. Dieser Zeitabschnitt kann bei Bedarf
  1605. unterdrückt, und nur YYYY-MM-DD verwendet werden.
  1606. </para>
  1607. <para>
  1608. Der Helfer versucht den <code>lastmod</code> Wert von der
  1609. Seiteneigenschaft <code>lastmod</code> zu erhalten wenn diese auf
  1610. der Seite gesetzt ist. Wenn der Wert kein gültiges Datum ist, wird
  1611. er ignoriert.
  1612. </para>
  1613. </entry>
  1614. </row>
  1615. <row>
  1616. <entry><code>changefreq</code></entry>
  1617. <entry>
  1618. <para>
  1619. Wie oft eine Seite geändert wird. Dieser Wert bietet eine generelle
  1620. Information für Suchmaschinen und muß nicht exakt mit der Anzahl
  1621. der Suchen auf der Seite übereinstimmen. Gültige Werte sind:
  1622. <itemizedlist>
  1623. <listitem><para>always</para></listitem>
  1624. <listitem><para>hourly</para></listitem>
  1625. <listitem><para>daily</para></listitem>
  1626. <listitem><para>weekly</para></listitem>
  1627. <listitem><para>monthly</para></listitem>
  1628. <listitem><para>yearly</para></listitem>
  1629. <listitem><para>never</para></listitem>
  1630. </itemizedlist>
  1631. </para>
  1632. <para>
  1633. Der Helfer versucht den <code>changefreq</code> Wert von der
  1634. Seiteneigenschaft <code>changefreq</code> zu erhalten, wenn diese
  1635. auf der Seite gesetzt ist. Wenn der Wert nicht gültig ist, wird er
  1636. ignoriert.
  1637. </para>
  1638. </entry>
  1639. </row>
  1640. <row>
  1641. <entry><code>priority</code></entry>
  1642. <entry>
  1643. <para>
  1644. Die Priorität dieser URL relativ zu anderen URLs auf der eigenen
  1645. Site. Der gültige Bereich für diesen Wert ist von 0.0 bis 1.0.
  1646. </para>
  1647. <para>
  1648. Der Helfer versucht den <code>priority</code> Wert von der
  1649. Seiteneigenschaft <code>priority</code> zu erhalten wenn dieser
  1650. auf der Seite gesetzt ist. Wenn der Wert nicht gültig ist, wird
  1651. er ignoriert.
  1652. </para>
  1653. </entry>
  1654. </row>
  1655. </tbody>
  1656. </tgroup>
  1657. </table>
  1658. <para>
  1659. Methoden im Sitemap Helfer:
  1660. </para>
  1661. <itemizedlist>
  1662. <listitem>
  1663. <para>
  1664. <code>{get|set}FormatOutput()</code> empfängt/setzt ein Flag das anzeigt ob
  1665. XML Ausgaben formatiert werden sollen. Das entspricht der Eigenschaft
  1666. <code>formatOutput</code> der nativen <classname>DOMDocument</classname>
  1667. Klasse. Mehr kann man unter <ulink url="http://php.net/domdocument">PHP:
  1668. DOMDocument - Handbuch</ulink> nachlesen. Der Standardwert ist
  1669. <code>false</code>.
  1670. </para>
  1671. </listitem>
  1672. <listitem>
  1673. <para>
  1674. <code>{get|set}UseXmlDeclaration()</code> empfängt/setzt ein Flag das
  1675. anzeigt ob die XML Deklaration bei der Darstellung enthalten sein soll.
  1676. Der Standardwert ist <code>true</code>.
  1677. </para>
  1678. </listitem>
  1679. <listitem>
  1680. <para>
  1681. <code>{get|set}UseSitemapValidators()</code> empfängt/setzt ein Flag das
  1682. anzeigt ob Sitemap Prüfungen verwendet werden sollen wenn die DOM Sitemap
  1683. dargestellt werden soll. Der Standardwert ist <code>true</code>.
  1684. </para>
  1685. </listitem>
  1686. <listitem>
  1687. <para>
  1688. <code>{get|set}UseSchemaValidation()</code> empfängt/setzt ein Flag das
  1689. anzeigt ob der Helfer eine XML Schema Prüfung verwenden soll wenn die DOM
  1690. Sitemap erzeugt wird. Der Standardwert ist <code>false</code>.
  1691. </para>
  1692. </listitem>
  1693. <listitem>
  1694. <para>
  1695. <code>{get|set}ServerUrl()</code> empfängt/setzt die Server URL die
  1696. nicht-absoluten URLs in der <code>url()</code> Methode vorangestellt werden.
  1697. Wenn keine Server URL spezifiziert ist, wird diese vom Helfer festgestellt.
  1698. </para>
  1699. </listitem>
  1700. <listitem>
  1701. <para>
  1702. <code>url()</code> wird verwendet um absolute URLs zu Seiten zu erstellen.
  1703. </para>
  1704. </listitem>
  1705. <listitem>
  1706. <para>
  1707. <code>getDomSitemap()</code> erzeugt ein DOMDocument von einem angegebenen
  1708. Container.
  1709. </para>
  1710. </listitem>
  1711. </itemizedlist>
  1712. <example id="zend.view.helpers.initial.navigation.sitemap.example">
  1713. <title>Eine XML Sitemap darstellen</title>
  1714. <para>
  1715. Dieses Beispiel zeigt wie eine XML Sitemap, basierend auf dem Setup das wir
  1716. vorher angegeben haben, dargestellt wird.
  1717. </para>
  1718. <programlisting role="php"><![CDATA[
  1719. // In einem View Skript oder Layout:
  1720. // Ausgabeformat
  1721. $this->navigation()
  1722. ->sitemap()
  1723. ->setFormatOutput(true); // Standardwert ist false
  1724. // Andere mögliche Methoden:
  1725. // ->setUseXmlDeclaration(false); // Standardwert ist true
  1726. // ->setServerUrl('http://my.otherhost.com');
  1727. // Standard ist die automatische Erkennung
  1728. // Sitemap ausdrucken
  1729. echo $this->navigation()->sitemap();
  1730. ]]>
  1731. </programlisting>
  1732. <para>
  1733. Es ist zu beachten wie Seiten die unsichtbar oder Seiten mit ACL Rollen die mit dem
  1734. View Helfer inkompatibel sin, ausgefiltert werden:
  1735. </para>
  1736. <programlisting role="xml"><![CDATA[
  1737. <?xml version="1.0" encoding="UTF-8"?>
  1738. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  1739. <url>
  1740. <loc>http://www.example.com/</loc>
  1741. </url>
  1742. <url>
  1743. <loc>http://www.example.com/products</loc>
  1744. </url>
  1745. <url>
  1746. <loc>http://www.example.com/products/server</loc>
  1747. </url>
  1748. <url>
  1749. <loc>http://www.example.com/products/server/faq</loc>
  1750. </url>
  1751. <url>
  1752. <loc>http://www.example.com/products/server/editions</loc>
  1753. </url>
  1754. <url>
  1755. <loc>http://www.example.com/products/server/requirements</loc>
  1756. </url>
  1757. <url>
  1758. <loc>http://www.example.com/products/studio</loc>
  1759. </url>
  1760. <url>
  1761. <loc>http://www.example.com/products/studio/customers</loc>
  1762. </url>
  1763. <url>
  1764. <loc>http://www.example.com/prodcts/studio/support</loc>
  1765. </url>
  1766. <url>
  1767. <loc>http://www.example.com/company/about</loc>
  1768. </url>
  1769. <url>
  1770. <loc>http://www.example.com/company/about/investors</loc>
  1771. </url>
  1772. <url>
  1773. <loc>http://www.example.com/company/news</loc>
  1774. </url>
  1775. <url>
  1776. <loc>http://www.example.com/company/news/press</loc>
  1777. </url>
  1778. <url>
  1779. <loc>http://www.example.com/archive</loc>
  1780. </url>
  1781. <url>
  1782. <loc>http://www.example.com/community</loc>
  1783. </url>
  1784. <url>
  1785. <loc>http://www.example.com/community/account</loc>
  1786. </url>
  1787. <url>
  1788. <loc>http://forums.example.com/</loc>
  1789. </url>
  1790. </urlset>
  1791. ]]>
  1792. </programlisting>
  1793. <para>
  1794. Die Sitemap ohne Verwendung einer ACL Rolle darstellen (sollte /community/account
  1795. ausfiltern):
  1796. </para>
  1797. <programlisting role="php"><![CDATA[
  1798. echo $this->navigation()
  1799. ->sitemap()
  1800. ->setFormatOutput(true)
  1801. ->setRole();
  1802. ]]>
  1803. </programlisting>
  1804. <programlisting role="xml"><![CDATA[
  1805. <?xml version="1.0" encoding="UTF-8"?>
  1806. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  1807. <url>
  1808. <loc>http://www.example.com/</loc>
  1809. </url>
  1810. <url>
  1811. <loc>http://www.example.com/products</loc>
  1812. </url>
  1813. <url>
  1814. <loc>http://www.example.com/products/server</loc>
  1815. </url>
  1816. <url>
  1817. <loc>http://www.example.com/products/server/faq</loc>
  1818. </url>
  1819. <url>
  1820. <loc>http://www.example.com/products/server/editions</loc>
  1821. </url>
  1822. <url>
  1823. <loc>http://www.example.com/products/server/requirements</loc>
  1824. </url>
  1825. <url>
  1826. <loc>http://www.example.com/products/studio</loc>
  1827. </url>
  1828. <url>
  1829. <loc>http://www.example.com/products/studio/customers</loc>
  1830. </url>
  1831. <url>
  1832. <loc>http://www.example.com/prodcts/studio/support</loc>
  1833. </url>
  1834. <url>
  1835. <loc>http://www.example.com/company/about</loc>
  1836. </url>
  1837. <url>
  1838. <loc>http://www.example.com/company/about/investors</loc>
  1839. </url>
  1840. <url>
  1841. <loc>http://www.example.com/company/news</loc>
  1842. </url>
  1843. <url>
  1844. <loc>http://www.example.com/company/news/press</loc>
  1845. </url>
  1846. <url>
  1847. <loc>http://www.example.com/archive</loc>
  1848. </url>
  1849. <url>
  1850. <loc>http://www.example.com/community</loc>
  1851. </url>
  1852. <url>
  1853. <loc>http://forums.example.com/</loc>
  1854. </url>
  1855. </urlset>
  1856. ]]>
  1857. </programlisting>
  1858. <para>
  1859. Darstellen der Sitemap mit Verwendung einer maximalen Tiefe von 1.
  1860. </para>
  1861. <programlisting role="php"><![CDATA[
  1862. echo $this->navigation()
  1863. ->sitemap()
  1864. ->setFormatOutput(true)
  1865. ->setMaxDepth(1);
  1866. ]]>
  1867. </programlisting>
  1868. <programlisting role="xml"><![CDATA[
  1869. <?xml version="1.0" encoding="UTF-8"?>
  1870. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  1871. <url>
  1872. <loc>http://www.example.com/</loc>
  1873. </url>
  1874. <url>
  1875. <loc>http://www.example.com/products</loc>
  1876. </url>
  1877. <url>
  1878. <loc>http://www.example.com/products/server</loc>
  1879. </url>
  1880. <url>
  1881. <loc>http://www.example.com/products/studio</loc>
  1882. </url>
  1883. <url>
  1884. <loc>http://www.example.com/company/about</loc>
  1885. </url>
  1886. <url>
  1887. <loc>http://www.example.com/company/about/investors</loc>
  1888. </url>
  1889. <url>
  1890. <loc>http://www.example.com/company/news</loc>
  1891. </url>
  1892. <url>
  1893. <loc>http://www.example.com/community</loc>
  1894. </url>
  1895. <url>
  1896. <loc>http://www.example.com/community/account</loc>
  1897. </url>
  1898. <url>
  1899. <loc>http://forums.example.com/</loc>
  1900. </url>
  1901. </urlset>
  1902. ]]>
  1903. </programlisting>
  1904. </example>
  1905. </sect4>
  1906. <sect4 id="zend.view.helpers.initial.navigation.navigation">
  1907. <title>Navigation Helfer</title>
  1908. <para>
  1909. Der Navigation Helfer ist ein Proxy Helfer der Aufrufe zu anderen Navigations Helfern
  1910. durchführt. Er kann als Einstiegspunkt fpr alle navigations-basierenden View Tasks
  1911. verwendet werden. Die vorher erwähnten Navigations Helfer sind im Namespace
  1912. <classname>Zend_View_Helper_Navigation</classname> und würden es deshalb benötigen, den Pfad
  1913. <code>Zend/View/Helper/Navigation</code> als Helfer Pfad der View hinzuzufügen. Mit dem
  1914. Proxy Helfer der im <classname>Zend_View_Helper</classname> Namespace sitzt, ist er immer
  1915. vorhanden, ohne das irgendein Helfer Pfad an der View hinzugefügt werden muß.
  1916. </para>
  1917. <para>
  1918. Der Navigations Helfer findet andere Helfer die das
  1919. <classname>Zend_View_Helper_Navigation_Helper</classname> Interface implementieren,
  1920. was bedeuet das auch auf eigene View Helfer weitergeleitet wird. Das würde trotzdem
  1921. das Hinzufügen des eigenen Helfer Pfades zur View benötigen.
  1922. </para>
  1923. <para>
  1924. Wenn auf andere Helfer weitergeleitet wird, kann der Navigations Helfer seinen
  1925. Container, ACL/Rolle und Übersetzer injizieren. Das bedeutet weder das man diese drei
  1926. nicht explizit in allen navigatorischen Helfern setzen muß, noch das diese in
  1927. <classname>Zend_Registry</classname> oder in statische Methoden injiziert werden muß.
  1928. </para>
  1929. <itemizedlist>
  1930. <listitem>
  1931. <para>
  1932. <code>findHelper()</code> findet alle angegebenen Helfer, prüft das dieser
  1933. ein navigatorischer Helfer ist, und injiziiert Container, ACL/Rolle und
  1934. Übersetzer.
  1935. </para>
  1936. </listitem>
  1937. <listitem>
  1938. <para>
  1939. <code>{get|set}InjectContainer()</code> empfängt/setzt ein Flag das anzeigt
  1940. ob der Container an weitergeleitete Helfer injiziiert werden soll. Der
  1941. Standardwert ist <code>true</code>.
  1942. </para>
  1943. </listitem>
  1944. <listitem>
  1945. <para>
  1946. <code>{get|set}InjectAcl()</code> empfängt/setzt ein Flag das anzeigt ob die
  1947. ACL/Rolle an weitergeleitete Helfer injiziiert werden soll. Der Standardwert
  1948. ist <code>true</code>.
  1949. </para>
  1950. </listitem>
  1951. <listitem>
  1952. <para>
  1953. <code>{get|set}InjectTranslator()</code> empfängt/setzt ein Flag das anzeigt
  1954. ob der Übersetzer an weitergeleitete Helfer injiziiert werden soll. Der
  1955. Standardwert ist <code>true</code>.
  1956. </para>
  1957. </listitem>
  1958. <listitem>
  1959. <para>
  1960. <code>{get|set}DefaultProxy()</code> empfängt/setzt den Standard Proxy. Der
  1961. Standardwert ist <code>'menu'</code>.
  1962. </para>
  1963. </listitem>
  1964. <listitem>
  1965. <para>
  1966. <code>render()</code> leitet auf die render Methode des Standardproxies weiter.
  1967. </para>
  1968. </listitem>
  1969. </itemizedlist>
  1970. </sect4>
  1971. </sect3>