Zend_View-Helpers-Navigation.xml 86 KB

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