Zend_View-Helpers-Navigation.xml 82 KB

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