Zend_View-Helpers-Navigation.xml 83 KB

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