| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect3 id="zend.view.helpers.initial.navigation">
- <title>Navigation Helpers</title>
- <para>
- The navigation helpers are used for rendering navigational elements
- from <link linkend="zend.navigation.containers">Zend_Navigation_Container</link>
- instances.
- </para>
- <para>
- There are 5 built-in helpers:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <link
- linkend="zend.view.helpers.initial.navigation.breadcrumbs">Breadcrumbs</link>,
- used for rendering the path to the currently active page.
- </para>
- </listitem>
- <listitem>
- <para>
- <link linkend="zend.view.helpers.initial.navigation.links">Links</link>,
- used for rendering navigational head links (e.g.
- <command><link rel="next" href="..." /></command>)
- </para>
- </listitem>
- <listitem>
- <para>
- <link linkend="zend.view.helpers.initial.navigation.menu">Menu</link>,
- used for rendering menus.
- </para>
- </listitem>
- <listitem>
- <para>
- <link linkend="zend.view.helpers.initial.navigation.sitemap">Sitemap</link>,
- used for rendering sitemaps conforming to the <ulink
- url="http://www.sitemaps.org/protocol.php">Sitemaps <acronym>XML</acronym>
- format</ulink>.
- </para>
- </listitem>
- <listitem>
- <para>
- <link
- linkend="zend.view.helpers.initial.navigation.navigation">Navigation</link>,
- used for proxying calls to other navigational helpers.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- All built-in helpers extend
- <classname>Zend_View_Helper_Navigation_HelperAbstract</classname>, which
- adds integration with <link linkend="zend.acl">ACL</link> and
- <link linkend="zend.translate">translation</link>. The abstract class
- implements the interface
- <classname>Zend_View_Helper_Navigation_Helper</classname>, which
- defines the following methods:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>getContainer()</methodname> and <methodname>setContainer()</methodname>
- gets and sets the navigation container the helper should operate on by default, and
- <methodname>hasContainer()</methodname> checks if the helper
- has container registered.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getTranslator()</methodname> and
- <methodname>setTranslator()</methodname> gets and sets the
- translator used for translating labels and titles.
- <methodname>getUseTranslator()</methodname> and
- <methodname>setUseTranslator()</methodname> controls whether
- the translator should be enabled. The method
- <methodname>hasTranslator()</methodname> checks if the helper has
- a translator registered.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getAcl()</methodname>, <methodname>setAcl()</methodname>,
- <methodname>getRole()</methodname> and <methodname>setRole()</methodname>,
- gets and sets <acronym>ACL</acronym> (<classname>Zend_Acl</classname>) instance and
- role (<type>String</type> or
- <classname>Zend_Acl_Role_Interface</classname>) used for
- filtering out pages when rendering. <methodname>getUseAcl()</methodname> and
- <methodname>setUseAcl()</methodname> controls whether <acronym>ACL</acronym> should
- be enabled. The methods <methodname>hasAcl()</methodname> and
- <methodname>hasRole()</methodname> checks if the helper has an
- <acronym>ACL</acronym> instance or a role registered.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>__toString()</methodname>, magic method to ensure that
- helpers can be rendered by echoing the helper instance directly.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>render()</methodname>, must be implemented by concrete
- helpers to do the actual rendering.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- In addition to the method stubs from the interface, the abstract
- class also implements the following methods:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>getIndent()</methodname> and <methodname>setIndent()</methodname>
- gets and sets indentation. The setter accepts a <type>String</type> or an
- <type>Integer</type>. In the case of an <type>Integer</type>, the helper will use
- the given number of spaces for indentation. I.e.,
- <methodname>setIndent(4)</methodname> means 4 initial spaces of
- indentation. Indentation can be specified for all helpers
- except the Sitemap helper.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getMinDepth()</methodname> and <methodname>setMinDepth()</methodname>
- gets and sets the minimum depth a page must have to be included by the helper.
- Setting <constant>NULL</constant> means no minimum depth.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getMaxDepth()</methodname> and <methodname>setMaxDepth()</methodname>
- gets and sets the maximum depth a page can have to be included by the helper.
- Setting <constant>NULL</constant> means no maximum depth.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getRenderInvisible()</methodname> and
- <methodname>setRenderInvisible()</methodname> gets and sets whether to
- render items that have been marked as invisible or not.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>__call()</methodname> is used for proxying calls to the
- container registered in the helper, which means you can
- call methods on a helper as if it was a container. See <link
- linkend="zend.view.helpers.initial.navigation.proxy.example">example</link>
- below.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>findActive($container, $minDepth, $maxDepth)</methodname>
- is used for finding the deepest active page in the given
- container. If depths are not given, the method will use
- the values retrieved from <methodname>getMinDepth()</methodname> and
- <methodname>getMaxDepth()</methodname>. The deepest active page must
- be between <varname>$minDepth</varname> and <varname>$maxDepth</varname>
- inclusively. Returns an array containing a reference to the
- found page instance and the depth at which the page was
- found.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>htmlify()</methodname> renders an <emphasis>'a'</emphasis>
- <acronym>HTML</acronym> element from a <classname>Zend_Navigation_Page</classname>
- instance.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>accept()</methodname> is used for determining if a page
- should be accepted when iterating containers. This method
- checks for page visibility and verifies that the helper's
- role is allowed access to the page's resource and privilege.
- </para>
- </listitem>
- <listitem>
- <para>
- The static method <methodname>setDefaultAcl()</methodname> is used for setting
- a default <acronym>ACL</acronym> object that will be used by helpers.
- </para>
- </listitem>
- <listitem>
- <para>
- The static method <methodname>setDefaultRole()</methodname> is used for setting
- a default <acronym>ACL</acronym> that will be used by helpers
- </para>
- </listitem>
- </itemizedlist>
- <para>
- If a navigation container is not explicitly set in a helper using
- <command>$helper->setContainer($nav)</command>, the helper will look
- for a container instance with the key <classname>Zend_Navigation</classname> in
- <link linkend="zend.registry">the registry</link>.
- If a container is not explicitly set or found in the registry, the
- helper will create an empty <classname>Zend_Navigation</classname>
- container when calling <command>$helper->getContainer()</command>.
- </para>
- <example id="zend.view.helpers.initial.navigation.proxy.example">
- <title>Proxying calls to the navigation container</title>
- <para>
- Navigation view helpers use the magic method <methodname>__call()</methodname>
- to proxy method calls to the navigation container that is
- registered in the view helper.
- </para>
- <programlisting language="php"><![CDATA[
- $this->navigation()->addPage(array(
- 'type' => 'uri',
- 'label' => 'New page'));
- ]]></programlisting>
- <para>
- The call above will add a page to the container in the
- <classname>Navigation</classname> helper.
- </para>
- </example>
- <sect4 id="zend.view.helpers.initial.navigation.i18n">
- <title>Translation of labels and titles</title>
- <para>
- The navigation helpers support translation of page labels and titles.
- You can set a translator of type <classname>Zend_Translate</classname>
- or <classname>Zend_Translate_Adapter</classname> in the helper using
- <command>$helper->setTranslator($translator)</command>, or like with other
- I18n-enabled components; by adding the translator to
- <link linkend="zend.registry">the registry</link> by using the key
- <classname>Zend_Translate</classname>.
- </para>
- <para>
- If you want to disable translation, use
- <command>$helper->setUseTranslator(false)</command>.
- </para>
- <para>
- The
- <link linkend="zend.view.helpers.initial.navigation.navigation">proxy
- helper</link> will inject its own translator to the helper it
- proxies to if the proxied helper doesn't already have a translator.
- </para>
- <note>
- <para>
- There is no translation in the sitemap helper, since there
- are no page labels or titles involved in an <acronym>XML</acronym> sitemap.
- </para>
- </note>
- </sect4>
- <sect4 id="zend.view.helpers.initial.navigation.acl">
- <title>Integration with ACL</title>
- <para>
- All navigational view helpers support <acronym>ACL</acronym> inherently from the
- class <classname>Zend_View_Helper_Navigation_HelperAbstract</classname>.
- A <classname>Zend_Acl</classname> object can be assigned to
- a helper instance with <code>$helper->setAcl($acl)</code>, and role
- with <code>$helper->setRole('member')</code> or
- <code>$helper->setRole(new Zend_Acl_Role('member'))</code> . If <acronym>ACL</acronym>
- is used in the helper, the role in the helper must be allowed by
- the <acronym>ACL</acronym> to access a page's <code>resource</code> and/or have the
- page's <code>privilege</code> for the page to be included when
- rendering.
- </para>
- <para>
- If a page is not accepted by <acronym>ACL</acronym>, any descendant page will also
- be excluded from rendering.
- </para>
- <para>
- The
- <link linkend="zend.view.helpers.initial.navigation.navigation">proxy
- helper</link> will inject its own <acronym>ACL</acronym> and role to the helper it
- proxies to if the proxied helper doesn't already have any.
- </para>
- <para>
- The examples below all show how <acronym>ACL</acronym> affects rendering.
- </para>
- </sect4>
- <sect4 id="zend.view.helpers.initial.navigation.setup">
- <title>Navigation setup used in examples</title>
- <para>
- This example shows the setup of a navigation container for a
- fictional software company.
- </para>
- <para>
- Notes on the setup:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- The domain for the site is <code>www.example.com</code>.
- </para>
- </listitem>
- <listitem>
- <para>
- Interesting page properties are marked with a comment.
- </para>
- </listitem>
- <listitem>
- <para>
- Unless otherwise is stated in other examples, the user
- is requesting the <acronym>URL</acronym>
- <code>http://www.example.com/products/server/faq/</code>,
- which translates to the page labeled <constant>FAQ</constant>
- under <code>Foo Server</code>.
- </para>
- </listitem>
- <listitem>
- <para>
- The assumed <acronym>ACL</acronym> and router setup is shown below the
- container setup.
- </para>
- </listitem>
- </itemizedlist>
- <programlisting language="php"><![CDATA[
- /*
- * Navigation container (config/array)
- * Each element in the array will be passed to
- * Zend_Navigation_Page::factory() when constructing
- * the navigation container below.
- */
- $pages = array(
- array(
- 'label' => 'Home',
- 'title' => 'Go Home',
- 'module' => 'default',
- 'controller' => 'index',
- 'action' => 'index',
- 'order' => -100 // make sure home is the first page
- ),
- array(
- 'label' => 'Special offer this week only!',
- 'module' => 'store',
- 'controller' => 'offer',
- 'action' => 'amazing',
- 'visible' => false // not visible
- ),
- array(
- 'label' => 'Products',
- 'module' => 'products',
- 'controller' => 'index',
- 'action' => 'index',
- 'pages' => array(
- array(
- 'label' => 'Foo Server',
- 'module' => 'products',
- 'controller' => 'server',
- 'action' => 'index',
- 'pages' => array(
- array(
- 'label' => 'FAQ',
- 'module' => 'products',
- 'controller' => 'server',
- 'action' => 'faq',
- 'rel' => array(
- 'canonical' => 'http://www.example.com/?page=faq',
- 'alternate' => array(
- 'module' => 'products',
- 'controller' => 'server',
- 'action' => 'faq',
- 'params' => array('format' => 'xml')
- )
- )
- ),
- array(
- 'label' => 'Editions',
- 'module' => 'products',
- 'controller' => 'server',
- 'action' => 'editions'
- ),
- array(
- 'label' => 'System Requirements',
- 'module' => 'products',
- 'controller' => 'server',
- 'action' => 'requirements'
- )
- )
- ),
- array(
- 'label' => 'Foo Studio',
- 'module' => 'products',
- 'controller' => 'studio',
- 'action' => 'index',
- 'pages' => array(
- array(
- 'label' => 'Customer Stories',
- 'module' => 'products',
- 'controller' => 'studio',
- 'action' => 'customers'
- ),
- array(
- 'label' => 'Support',
- 'module' => 'prodcts',
- 'controller' => 'studio',
- 'action' => 'support'
- )
- )
- )
- )
- ),
- array(
- 'label' => 'Company',
- 'title' => 'About us',
- 'module' => 'company',
- 'controller' => 'about',
- 'action' => 'index',
- 'pages' => array(
- array(
- 'label' => 'Investor Relations',
- 'module' => 'company',
- 'controller' => 'about',
- 'action' => 'investors'
- ),
- array(
- 'label' => 'News',
- 'class' => 'rss', // class
- 'module' => 'company',
- 'controller' => 'news',
- 'action' => 'index',
- 'pages' => array(
- array(
- 'label' => 'Press Releases',
- 'module' => 'company',
- 'controller' => 'news',
- 'action' => 'press'
- ),
- array(
- 'label' => 'Archive',
- 'route' => 'archive', // route
- 'module' => 'company',
- 'controller' => 'news',
- 'action' => 'archive'
- )
- )
- )
- )
- ),
- array(
- 'label' => 'Community',
- 'module' => 'community',
- 'controller' => 'index',
- 'action' => 'index',
- 'pages' => array(
- array(
- 'label' => 'My Account',
- 'module' => 'community',
- 'controller' => 'account',
- 'action' => 'index',
- 'resource' => 'mvc:community.account' // resource
- ),
- array(
- 'label' => 'Forums',
- 'uri' => 'http://forums.example.com/',
- 'class' => 'external' // class
- )
- )
- ),
- array(
- 'label' => 'Administration',
- 'module' => 'admin',
- 'controller' => 'index',
- 'action' => 'index',
- 'resource' => 'mvc:admin', // resource
- 'pages' => array(
- array(
- 'label' => 'Write new article',
- 'module' => 'admin',
- 'controller' => 'post',
- 'aciton' => 'write'
- )
- )
- )
- );
- // Create container from array
- $container = new Zend_Navigation($pages);
- // Store the container in the proxy helper:
- $view->getHelper('navigation')->setContainer($container);
- // ...or simply:
- $view->navigation($container);
- // ...or store it in the reigstry:
- Zend_Registry::set('Zend_Navigation', $container);
- ]]></programlisting>
- <para>
- In addition to the container above, the following setup is assumed:
- </para>
- <programlisting language="php"><![CDATA[
- // Setup router (default routes and 'archive' route):
- $front = Zend_Controller_Front::getInstance();
- $router = $front->getRouter();
- $router->addDefaultRoutes();
- $router->addRoute(
- 'archive',
- new Zend_Controller_Router_Route(
- '/archive/:year',
- array(
- 'module' => 'company',
- 'controller' => 'news',
- 'action' => 'archive',
- 'year' => (int) date('Y') - 1
- ),
- array('year' => '\d+')
- )
- );
- // Setup ACL:
- $acl = new Zend_Acl();
- $acl->addRole(new Zend_Acl_Role('member'));
- $acl->addRole(new Zend_Acl_Role('admin'));
- $acl->add(new Zend_Acl_Resource('mvc:admin'));
- $acl->add(new Zend_Acl_Resource('mvc:community.account'));
- $acl->allow('member', 'mvc:community.account');
- $acl->allow('admin', null);
- // Store ACL and role in the proxy helper:
- $view->navigation()->setAcl($acl)->setRole('member');
- // ...or set default ACL and role statically:
- Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl);
- Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole('member');
- ]]></programlisting>
- </sect4>
- <sect4 id="zend.view.helpers.initial.navigation.breadcrumbs">
- <title>Breadcrumbs Helper</title>
- <para>
- Breadcrumbs are used for indicating where in a sitemap
- a user is currently browsing, and are typically rendered
- like this: "You are here: Home > Products > FantasticProduct 1.0".
- The breadcrumbs helper follows the guidelines from <ulink
- url="http://developer.yahoo.com/ypatterns/pattern.php?pattern=breadcrumbs">Breadcrumbs
- Pattern - Yahoo! Design Pattern Library</ulink>,
- and allows simple customization (minimum/maximum depth, indentation,
- separator, and whether the last element should be linked), or
- rendering using a partial view script.
- </para>
- <para>
- The Breadcrumbs helper works like this; it finds the deepest active
- page in a navigation container, and renders an upwards path to
- the root. For <acronym>MVC</acronym> pages, the "activeness" of a page is
- determined by inspecting the request object, as stated in the
- section on <link linkend="zend.navigation.pages.mvc">Zend_Navigation_Page_Mvc</link>.
- </para>
- <para>
- The helper sets the <code>minDepth</code> property to 1 by default,
- meaning breadcrumbs will not be rendered if the deepest active page
- is a root page. If <code>maxDepth</code> is specified, the helper
- will stop rendering when at the specified depth (e.g. stop at level
- 2 even if the deepest active page is on level 3).
- </para>
- <para>
- Methods in the breadcrumbs helper:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <code>{get|set}Separator()</code> gets/sets separator
- string that is used between breadcrumbs. Defualt is
- <code>' &gt; '</code>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}LinkLast()</code> gets/sets whether the
- last breadcrumb should be rendered as an anchor or not.
- Default is <constant>FALSE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}Partial()</code> gets/sets a partial view
- script that should be used for rendering breadcrumbs.
- If a partial view script is set, the helper's
- <methodname>render()</methodname> method will use the
- <methodname>renderPartial()</methodname> method. If no partial is
- set, the <methodname>renderStraight()</methodname> method is used.
- The helper expects the partial to be a <type>String</type>
- or an <type>Array</type> with two elements. If the partial
- is a <type>String</type>, it denotes the name of the partial
- script to use. If it is an <type>Array</type>, the first
- element will be used as the name of the partial view
- script, and the second element is the module where the
- script is found.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>renderStraight()</methodname> is the default render
- method.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>renderPartial()</methodname> is used for rendering
- using a partial view script.
- </para>
- </listitem>
- </itemizedlist>
- <example id="zend.view.helpers.initial.navigation.breadcrumbs.example1">
- <title>Rendering breadcrumbs</title>
- <para>
- This example shows how to render breadcrumbs with default
- settings.
- </para>
- <programlisting language="php"><![CDATA[
- In a view script or layout:
- <?php echo $this->navigation()->breadcrumbs(); ?>
- The two calls above take advantage of the magic __toString() method,
- and are equivalent to:
- <?php echo $this->navigation()->breadcrumbs()->render(); ?>
- Output:
- <a href="/products">Products</a> > <a href="/products/server">Foo Server</a> > FAQ
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.breadcrumbs.example2">
- <title>Specifying indentation</title>
- <para>
- This example shows how to render breadcrumbs with initial
- indentation.
- </para>
- <programlisting language="php"><![CDATA[
- Rendering with 8 spaces indentation:
- <?php echo $this->navigation()->breadcrumbs()->setIndent(8);?>
- Output:
- <a href="/products">Products</a> > <a href="/products/server">Foo Server</a> > FAQ
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.breadcrumbs.example3">
- <title>Customize breadcrumbs output</title>
- <para>
- This example shows how to customze breadcrumbs output by
- specifying various options.
- </para>
- <programlisting language="php"><![CDATA[
- In a view script or layout:
- <?php
- echo $this->navigation()
- ->breadcrumbs()
- ->setLinkLast(true) // link last page
- ->setMaxDepth(1) // stop at level 1
- ->setSeparator(' ▶' . PHP_EOL); // cool separator with newline
- ?>
- Output:
- <a href="/products">Products</a> ▶
- <a href="/products/server">Foo Server</a>
- /////////////////////////////////////////////////////
- Setting minimum depth required to render breadcrumbs:
- <?php
- $this->navigation()->breadcrumbs()->setMinDepth(10);
- echo $this->navigation()->breadcrumbs();
- ?>
- Output:
- Nothing, because the deepest active page is not at level 10 or deeper.
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.breadcrumbs.example4">
- <title>Rendering breadcrumbs using a partial view script</title>
- <para>
- This example shows how to render customized breadcrumbs using
- a partial vew script. By calling <methodname>setPartial()</methodname>,
- you can specify a partial view script that will be used
- when calling <methodname>render()</methodname>. When a partial is specified,
- the <methodname>renderPartial()</methodname> method will be called. This
- method will find the deepest active page and pass an array
- of pages that leads to the active page to the partial view
- script.
- </para>
- <para>
- In a layout:
- </para>
- <programlisting language="php"><![CDATA[
- $partial = ;
- echo $this->navigation()->breadcrumbs()
- ->setPartial(array('breadcrumbs.phtml', 'default'));
- ]]></programlisting>
- <para>
- Contents of
- <code>application/modules/default/views/breadcrumbs.phtml</code>:
- </para>
- <programlisting language="php"><![CDATA[
- echo implode(', ', array_map(
- function ($a) { return $a->getLabel(); },
- $this->pages));
- ]]></programlisting>
- <para>
- Output:
- </para>
- <programlisting language="php"><![CDATA[
- Products, Foo Server, FAQ
- ]]></programlisting>
- </example>
- </sect4>
- <sect4 id="zend.view.helpers.initial.navigation.links">
- <title>Links Helper</title>
- <para>
- The links helper is used for rendering <acronym>HTML</acronym> <constant>LINK</constant>
- elements. Links are used for describing document relationships
- of the currently active page. Read more about links and link
- types at <ulink url="http://www.w3.org/TR/html4/struct/links.html#h-12.3">Document
- relationships: the LINK element (HTML4 W3C Rec.)</ulink>
- and <ulink
- url="http://www.w3.org/TR/html4/types.html#h-6.12">Link types (HTML4 W3C
- Rec.)</ulink> in the <acronym>HTML</acronym>4 W3C Recommendation.
- </para>
- <para>
- There are two types of relations; forward and reverse, indicated
- by the keyords <code>'rel'</code> and <code>'rev'</code>. Most
- methods in the helper will take a <varname>$rel</varname> param, which
- must be either <code>'rel'</code> or <code>'rev'</code>. Most
- methods also take a <varname>$type</varname> param, which is used
- for specifying the link type (e.g. alternate, start, next, prev,
- chapter, etc).
- </para>
- <para>
- Relationships can be added to page objects manually, or found
- by traversing the container registered in the helper. The method
- <methodname>findRelation($page, $rel, $type)</methodname> will first try
- to find the given <varname>$rel</varname> of <varname>$type</varname> from
- the <varname>$page</varname> by calling <code>$page->findRel($type)</code>
- or <code>$page->findRel($type)</code>. If the <varname>$page</varname>
- has a relation that can be converted to a page instance, that
- relation will be used. If the <varname>$page</varname> instance doesn't
- have the specified <varname>$type</varname>, the helper will look for
- a method in the helper named <code>search$rel$type</code> (e.g.
- <methodname>searchRelNext()</methodname> or
- <methodname>searchRevAlternate()</methodname>).
- If such a method exists, it will be used for determining the
- <varname>$page</varname>'s relation by traversing the container.
- </para>
- <para>
- Not all relations can be determined by traversing the container.
- These are the relations that will be found by searching:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>searchRelStart()</methodname>, forward 'start'
- relation: the first page in the container.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>searchRelNext()</methodname>, forward 'next'
- relation; finds the next page in the container, i.e.
- the page after the active page.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>searchRelPrev()</methodname>, forward 'prev'
- relation; finds the previous page, i.e. the page before
- the active page.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>searchRelChapter()</methodname>, forward 'chapter'
- relations; finds all pages on level 0 except the 'start'
- relation or the active page if it's on level 0.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>searchRelSection()</methodname>, forward 'section'
- relations; finds all child pages of the active page if
- the active page is on level 0 (a 'chapter').
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>searchRelSubsection()</methodname>, forward 'subsection'
- relations; finds all child pages of the active page if
- the active pages is on level 1 (a 'section').
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>searchRevSection()</methodname>, reverse 'section'
- relation; finds the parent of the active page if the
- active page is on level 1 (a 'section').
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>searchRevSubsection()</methodname>, reverse 'subsection'
- relation; finds the parent of the active page if the
- active page is on level 2 (a 'subsection').
- </para>
- </listitem>
- </itemizedlist>
- <note>
- <para>
- When looking for relations in the page instance
- (<code>$page->getRel($type)</code> or
- <code>$page->getRev($type)</code>), the helper accepts the
- values of type <type>String</type>, <type>Array</type>,
- <classname>Zend_Config</classname>, or
- <classname>Zend_Navigation_Page</classname>. If a string
- is found, it will be converted to a
- <classname>Zend_Navigation_Page_Uri</classname>. If an array
- or a config is found, it will be converted to one or several
- page instances. If the first key of the array/config is numeric,
- it will be considered to contain several pages, and each
- element will be passed to the
- <link linkend="zend.navigation.pages.factory">page factory</link>.
- If the first key is not numeric, the array/config will be
- passed to the page factory directly, and a single page will
- be returned.
- </para>
- </note>
- <para>
- The helper also supports magic methods for finding relations.
- E.g. to find forward alternate relations, call
- <code>$helper->findRelAlternate($page)</code>, and to find
- reverse section relations, call
- <code>$helper->findRevSection($page)</code>. Those calls correspond
- to <code>$helper->findRelation($page, 'rel', 'alternate');</code>
- and <code>$helper->findRelation($page, 'rev', 'section');</code>
- respectively.
- </para>
- <para>
- To customize which relations should be rendered, the helper
- uses a render flag. The render flag is an integer value, and will be
- used in a
- <ulink url="http://php.net/manual/en/language.operators.bitwise.php">bitwse
- <code>and</code> (<code>&</code>) operation</ulink> against the
- helper's render constants to determine if the relation that belongs
- to the render constant should be rendered.
- </para>
- <para>
- See the
- <link linkend="zend.view.helpers.initial.navigation.links.example3">example
- below</link> for more information.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_ALTERNATE</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_STYLESHEET</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_START</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_NEXT</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_PREV</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_CONTENTS</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_INDEX</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_GLOSSARY</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_COPYRIGHT</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_CHAPTER</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_SECTION</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_SUBSECTION</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_APPENDIX</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_HELP</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_BOOKMARK</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_CUSTOM</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Links::RENDER_ALL</constant>
- </para>
- </listitem>
- </itemizedlist>
- <para>
- The constants from <constant>RENDER_ALTERNATE</constant> to
- <constant>RENDER_BOOKMARK</constant> denote standard <acronym>HTML</acronym> link types.
- <constant>RENDER_CUSTOM</constant> denotes non-standard relations that
- specified in pages. <constant>RENDER_ALL</constant> denotes standard and
- non-standard relations.
- </para>
- <para>
- Methods in the links helper:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <code>{get|set}RenderFlag()</code> gets/sets the render
- flag. Default is <constant>RENDER_ALL</constant>. See examples
- below on how to set the render flag.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>findAllRelations()</methodname> finds all relations of
- all types for a given page.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>findRelation()</methodname> finds all relations of a given
- type from a given page.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>searchRel{Start|Next|Prev|Chapter|Section|Subsection}()</code>
- traverses a container to find forward relations to
- the start page, the next page, the previous page,
- chapters, sections, and subsections.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>searchRev{Section|Subsection}()</code> traverses
- a container to find reverse relations to sections or
- subsections.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>renderLink()</methodname> renders a single <code>link</code>
- element.
- </para>
- </listitem>
- </itemizedlist>
- <example id="zend.view.helpers.initial.navigation.links.example1">
- <title>Specify relations in pages</title>
- <para>
- This example shows how to specify relations in pages.
- </para>
- <programlisting language="php"><![CDATA[
- $container = new Zend_Navigation(array(
- array(
- 'label' => 'Relations using strings',
- 'rel' => array(
- 'alternate' => 'http://www.example.org/'
- ),
- 'rev' => array(
- 'alternate' => 'http://www.example.net/'
- )
- ),
- array(
- 'label' => 'Relations using arrays',
- 'rel' => array(
- 'alternate' => array(
- 'label' => 'Example.org',
- 'uri' => 'http://www.example.org/'
- )
- )
- ),
- array(
- 'label' => 'Relations using configs',
- 'rel' => array(
- 'alternate' => new Zend_Config(array(
- 'label' => 'Example.org',
- 'uri' => 'http://www.example.org/'
- ))
- )
- ),
- array(
- 'label' => 'Relations using pages instance',
- 'rel' => array(
- 'alternate' => Zend_Navigation_Page::factory(array(
- 'label' => 'Example.org',
- 'uri' => 'http://www.example.org/'
- ))
- )
- )
- ));
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.links.example2">
- <title>Default rendering of links</title>
- <para>
- This example shows how to render a menu from a container
- registered/found in the view helper.
- </para>
- <programlisting language="php"><![CDATA[
- In a view script or layout:
- <?php echo $this->view->navigation()->links(); ?>
- Output:
- <link rel="alternate" href="/products/server/faq/format/xml">
- <link rel="start" href="/" title="Home">
- <link rel="next" href="/products/server/editions" title="Editions">
- <link rel="prev" href="/products/server" title="Foo Server">
- <link rel="chapter" href="/products" title="Products">
- <link rel="chapter" href="/company/about" title="Company">
- <link rel="chapter" href="/community" title="Community">
- <link rel="canonical" href="http://www.example.com/?page=server-faq">
- <link rev="subsection" href="/products/server" title="Foo Server">
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.links.example3">
- <title>Specify which relations to render</title>
- <para>
- This example shows how to specify which relations to find
- and render.
- </para>
- <programlisting language="php"><![CDATA[
- Render only start, next, and prev:
- $helper->setRenderFlag(Zend_View_Helper_Navigation_Links::RENDER_START |
- Zend_View_Helper_Navigation_Links::RENDER_NEXT |
- Zend_View_Helper_Navigation_Links::RENDER_PREV);
- Output:
- <link rel="start" href="/" title="Home">
- <link rel="next" href="/products/server/editions" title="Editions">
- <link rel="prev" href="/products/server" title="Foo Server">
- ]]></programlisting>
- <programlisting language="php"><![CDATA[
- Render only native link types:
- $helper->setRenderFlag(Zend_View_Helper_Navigation_Links::RENDER_ALL ^
- Zend_View_Helper_Navigation_Links::RENDER_CUSTOM);
- Output:
- <link rel="alternate" href="/products/server/faq/format/xml">
- <link rel="start" href="/" title="Home">
- <link rel="next" href="/products/server/editions" title="Editions">
- <link rel="prev" href="/products/server" title="Foo Server">
- <link rel="chapter" href="/products" title="Products">
- <link rel="chapter" href="/company/about" title="Company">
- <link rel="chapter" href="/community" title="Community">
- <link rev="subsection" href="/products/server" title="Foo Server">
- ]]></programlisting>
- <programlisting language="php"><![CDATA[
- Render all but chapter:
- $helper->setRenderFlag(Zend_View_Helper_Navigation_Links::RENDER_ALL ^
- Zend_View_Helper_Navigation_Links::RENDER_CHAPTER);
- Output:
- <link rel="alternate" href="/products/server/faq/format/xml">
- <link rel="start" href="/" title="Home">
- <link rel="next" href="/products/server/editions" title="Editions">
- <link rel="prev" href="/products/server" title="Foo Server">
- <link rel="canonical" href="http://www.example.com/?page=server-faq">
- <link rev="subsection" href="/products/server" title="Foo Server">
- ]]></programlisting>
- </example>
- </sect4>
- <sect4 id="zend.view.helpers.initial.navigation.menu">
- <title>Menu Helper</title>
- <para>
- The Menu helper is used for rendering menus from navigation
- containers. By default, the menu will be rendered using
- <acronym>HTML</acronym> <code>UL</code> and <code>LI</code> tags, but the helper also
- allows using a partial view script.
- </para>
- <para>
- Methods in the Menu helper:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <code>{get|set}UlClass()</code> gets/sets the <acronym>CSS</acronym> class
- used in <methodname>renderMenu()</methodname>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}ActiveClass()</code> gets/sets the <acronym>CSS</acronym> class
- for the active elements when rendering.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}OnlyActiveBranch()</code> gets/sets a flag
- specifying whether only the active branch of a container
- should be rendered.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}ExpandSiblingNodesOfActiveBranch()</code>
- gets/sets a flag specifying whether the sibling nodes of all
- nodes in the active branch should also be expanded and rendered.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}RenderParents()</code> gets/sets a flag
- specifying whether parents should be rendered when only
- rendering active branch of a container. If set to
- <constant>FALSE</constant>, only the deepest active menu will be
- rendered.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}Partial()</code> gets/sets a partial view
- script that should be used for rendering menu.
- If a partial view script is set, the helper's
- <methodname>render()</methodname> method will use the
- <methodname>renderPartial()</methodname> method. If no partial is
- set, the <methodname>renderMenu()</methodname> method is used.
- The helper expects the partial to be a <type>String</type>
- or an <type>Array</type> with two elements. If the partial
- is a <type>String</type>, it denotes the name of the partial
- script to use. If it is an <type>Array</type>, the first
- element will be used as the name of the partial view
- script, and the second element is the module where the
- script is found.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>htmlify()</methodname> overrides the method from the
- abstract class to return <code>span</code> elements
- if the page has no <code>href</code>.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>renderMenu($container = null, $options = array())</methodname>
- is the default render method, and will render a container as
- a <acronym>HTML</acronym> <code>UL</code> list.
- </para>
- <para>
- If <varname>$container</varname> is not given, the container
- registered in the helper will be rendered.
- </para>
- <para>
- <varname>$options</varname> is used for overriding options
- specified temporarily without rsetting the values in the
- helper instance. It is an associative array where each key
- corresponds to an option in the helper.
- </para>
- <para>
- Recognized options:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <code>indent</code>; indentation. Expects a
- <type>String</type> or an <code>int</code>
- value.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>minDepth</code>; minimum depth. Expcects
- an <code>int</code> or <constant>NULL</constant> (no
- minimum depth).
- </para>
- </listitem>
- <listitem>
- <para>
- <code>maxDepth</code>; maximum depth. Expcects
- an <code>int</code> or <constant>NULL</constant> (no
- maximum depth).
- </para>
- </listitem>
- <listitem>
- <para>
- <code>ulClass</code>; <acronym>CSS</acronym> class for
- <code>ul</code> element. Expects a
- <type>String</type>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>activeClass</code>; <acronym>CSS</acronym> class for
- for the active elements when rendering. Expects a
- <type>String</type>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>onlyActiveBranch</code>; whether only
- active branch should be rendered. Expects
- a <type>Boolean</type> value.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>expandSiblingNodesOfActiveBranch</code>;
- whether the sibling nodes of nodes in the active
- branch should be expanded and rendered. Expects
- a <type>Boolean</type> value.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>renderParents</code>; whether parents
- should be rendered if only rendering active
- branch. Expects a <type>Boolean</type> value.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- If an option is not given, the value set in the helper
- will be used.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>renderPartial()</methodname> is used for rendering the menu
- using a partial view script.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>renderSubMenu()</methodname> renders the deepest menu level
- of a container's active branch.
- </para>
- </listitem>
- </itemizedlist>
- <example id="zend.view.helpers.initial.navigation.menu.example1">
- <title>Rendering a menu</title>
- <para>
- This example shows how to render a menu from a container
- registered/found in the view helper. Notice how pages
- are filtered out based on visibility and <acronym>ACL</acronym>.
- </para>
- <programlisting language="php"><![CDATA[
- In a view script or layout:
- <?php echo $this->navigation()->menu()->render() ?>
- Or simply:
- <?php echo $this->navigation()->menu() ?>
- Output:
- <ul class="navigation">
- <li>
- <a title="Go Home" href="/">Home</a>
- </li>
- <li class="active">
- <a href="/products">Products</a>
- <ul>
- <li class="active">
- <a href="/products/server">Foo Server</a>
- <ul>
- <li class="active">
- <a href="/products/server/faq">FAQ</a>
- </li>
- <li>
- <a href="/products/server/editions">Editions</a>
- </li>
- <li>
- <a href="/products/server/requirements">System Requirements</a>
- </li>
- </ul>
- </li>
- <li>
- <a href="/products/studio">Foo Studio</a>
- <ul>
- <li>
- <a href="/products/studio/customers">Customer Stories</a>
- </li>
- <li>
- <a href="/prodcts/studio/support">Support</a>
- </li>
- </ul>
- </li>
- </ul>
- </li>
- <li>
- <a title="About us" href="/company/about">Company</a>
- <ul>
- <li>
- <a href="/company/about/investors">Investor Relations</a>
- </li>
- <li>
- <a class="rss" href="/company/news">News</a>
- <ul>
- <li>
- <a href="/company/news/press">Press Releases</a>
- </li>
- <li>
- <a href="/archive">Archive</a>
- </li>
- </ul>
- </li>
- </ul>
- </li>
- <li>
- <a href="/community">Community</a>
- <ul>
- <li>
- <a href="/community/account">My Account</a>
- </li>
- <li>
- <a class="external" href="http://forums.example.com/">Forums</a>
- </li>
- </ul>
- </li>
- </ul>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.menu.example2">
- <title>Calling renderMenu() directly</title>
- <para>
- This example shows how to render a menu that is not
- registered in the view helper by calling the
- <methodname>renderMenu()</methodname> directly and specifying a few
- options.
- </para>
- <programlisting language="php"><![CDATA[
- <?php
- // render only the 'Community' menu
- $community = $this->navigation()->findOneByLabel('Community');
- $options = array(
- 'indent' => 16,
- 'ulClass' => 'community'
- );
- echo $this->navigation()
- ->menu()
- ->renderMenu($community, $options);
- ?>
- Output:
- <ul class="community">
- <li>
- <a href="/community/account">My Account</a>
- </li>
- <li>
- <a class="external" href="http://forums.example.com/">Forums</a>
- </li>
- </ul>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.menu.example3">
- <title>Rendering the deepest active menu</title>
- <para>
- This example shows how the <methodname>renderSubMenu()</methodname>
- will render the deepest sub menu of the active branch.
- </para>
- <para>
- Calling <methodname>renderSubMenu($container, $ulClass, $indent)</methodname>
- is equivalent to calling <methodname>renderMenu($container, $options)</methodname>
- with the following options:
- </para>
- <programlisting language="php"><![CDATA[
- array(
- 'ulClass' => $ulClass,
- 'indent' => $indent,
- 'minDepth' => null,
- 'maxDepth' => null,
- 'onlyActiveBranch' => true,
- 'renderParents' => false
- );
- ]]></programlisting>
- <programlisting language="php"><![CDATA[
- <?php
- echo $this->navigation()
- ->menu()
- ->renderSubMenu(null, 'sidebar', 4);
- ?>
- The output will be the same if 'FAQ' or 'Foo Server' is active:
- <ul class="sidebar">
- <li class="active">
- <a href="/products/server/faq">FAQ</a>
- </li>
- <li>
- <a href="/products/server/editions">Editions</a>
- </li>
- <li>
- <a href="/products/server/requirements">System Requirements</a>
- </li>
- </ul>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.menu.example4">
- <title>Rendering a menu with maximum depth</title>
- <programlisting language="php"><![CDATA[
- <?php
- echo $this->navigation()
- ->menu()
- ->setMaxDepth(1);
- ?>
- Output:
- <ul class="navigation">
- <li>
- <a title="Go Home" href="/">Home</a>
- </li>
- <li class="active">
- <a href="/products">Products</a>
- <ul>
- <li class="active">
- <a href="/products/server">Foo Server</a>
- </li>
- <li>
- <a href="/products/studio">Foo Studio</a>
- </li>
- </ul>
- </li>
- <li>
- <a title="About us" href="/company/about">Company</a>
- <ul>
- <li>
- <a href="/company/about/investors">Investor Relations</a>
- </li>
- <li>
- <a class="rss" href="/company/news">News</a>
- </li>
- </ul>
- </li>
- <li>
- <a href="/community">Community</a>
- <ul>
- <li>
- <a href="/community/account">My Account</a>
- </li>
- <li>
- <a class="external" href="http://forums.example.com/">Forums</a>
- </li>
- </ul>
- </li>
- </ul>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.menu.example5">
- <title>Rendering a menu with minimum depth</title>
- <programlisting language="php"><![CDATA[
- <?php
- echo $this->navigation()
- ->menu()
- ->setMinDepth(1);
- ?>
- Output:
- <ul class="navigation">
- <li class="active">
- <a href="/products/server">Foo Server</a>
- <ul>
- <li class="active">
- <a href="/products/server/faq">FAQ</a>
- </li>
- <li>
- <a href="/products/server/editions">Editions</a>
- </li>
- <li>
- <a href="/products/server/requirements">System Requirements</a>
- </li>
- </ul>
- </li>
- <li>
- <a href="/products/studio">Foo Studio</a>
- <ul>
- <li>
- <a href="/products/studio/customers">Customer Stories</a>
- </li>
- <li>
- <a href="/prodcts/studio/support">Support</a>
- </li>
- </ul>
- </li>
- <li>
- <a href="/company/about/investors">Investor Relations</a>
- </li>
- <li>
- <a class="rss" href="/company/news">News</a>
- <ul>
- <li>
- <a href="/company/news/press">Press Releases</a>
- </li>
- <li>
- <a href="/archive">Archive</a>
- </li>
- </ul>
- </li>
- <li>
- <a href="/community/account">My Account</a>
- </li>
- <li>
- <a class="external" href="http://forums.example.com/">Forums</a>
- </li>
- </ul>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.menu.example6">
- <title>Rendering only the active branch of a menu</title>
- <programlisting language="php"><![CDATA[
- <?php
- echo $this->navigation()
- ->menu()
- ->setOnlyActiveBranch(true);
- ?>
- Output:
- <ul class="navigation">
- <li class="active">
- <a href="/products">Products</a>
- <ul>
- <li class="active">
- <a href="/products/server">Foo Server</a>
- <ul>
- <li class="active">
- <a href="/products/server/faq">FAQ</a>
- </li>
- <li>
- <a href="/products/server/editions">Editions</a>
- </li>
- <li>
- <a href="/products/server/requirements">System Requirements</a>
- </li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.menu.example7">
- <title>
- Rendering only the active branch of a menu with minimum depth
- </title>
- <programlisting language="php"><![CDATA[
- <?php
- echo $this->navigation()
- ->menu()
- ->setOnlyActiveBranch(true)
- ->setMinDepth(1);
- ?>
- Output:
- <ul class="navigation">
- <li class="active">
- <a href="/products/server">Foo Server</a>
- <ul>
- <li class="active">
- <a href="/products/server/faq">FAQ</a>
- </li>
- <li>
- <a href="/products/server/editions">Editions</a>
- </li>
- <li>
- <a href="/products/server/requirements">System Requirements</a>
- </li>
- </ul>
- </li>
- </ul>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.menu.example8">
- <title>
- Rendering only the active branch of a menu with maximum depth
- </title>
- <programlisting language="php"><![CDATA[
- <?php
- echo $this->navigation()
- ->menu()
- ->setOnlyActiveBranch(true)
- ->setMaxDepth(1);
- ?>
- Output:
- <ul class="navigation">
- <li class="active">
- <a href="/products">Products</a>
- <ul>
- <li class="active">
- <a href="/products/server">Foo Server</a>
- </li>
- <li>
- <a href="/products/studio">Foo Studio</a>
- </li>
- </ul>
- </li>
- </ul>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.menu.example9">
- <title>
- Rendering only the active branch of a menu with maximum depth
- and no parents
- </title>
- <para>
- </para>
- <programlisting language="php"><![CDATA[
- <?php
- echo $this->navigation()
- ->menu()
- ->setOnlyActiveBranch(true)
- ->setRenderParents(false)
- ->setMaxDepth(1);
- ?>
- Output:
- <ul class="navigation">
- <li class="active">
- <a href="/products/server">Foo Server</a>
- </li>
- <li>
- <a href="/products/studio">Foo Studio</a>
- </li>
- </ul>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.menu.example10">
- <title>Rendering a custom menu using a partial view script</title>
- <para>
- This example shows how to render a custom menu using
- a partial vew script. By calling <methodname>setPartial()</methodname>,
- you can specify a partial view script that will be used
- when calling <methodname>render()</methodname>. When a partial is specified,
- the <methodname>renderPartial()</methodname> method will be called. This
- method will assign the container to the view with the key
- <code>container</code>.
- </para>
- <para>In a layout:</para>
- <programlisting language="php"><![CDATA[
- $partial = array('menu.phtml', 'default');
- $this->navigation()->menu()->setPartial($partial);
- echo $this->navigation()->menu()->render();
- ]]></programlisting>
- <para>In application/modules/default/views/menu.phtml:</para>
- <programlisting language="php"><![CDATA[
- foreach ($this->container as $page) {
- echo $this->navigation()->menu()->htmlify($page), PHP_EOL;
- }
- ]]></programlisting>
- <para>Output:</para>
- <programlisting language="php"><![CDATA[
- <a title="Go Home" href="/">Home</a>
- <a href="/products">Products</a>
- <a title="About us" href="/company/about">Company</a>
- <a href="/community">Community</a>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.navigation.menu.example11">
- <title>
- Rendering only the active branch and all siblings of the active branch
- </title>
- <programlisting language="php"><![CDATA[
- echo $this->navigation()
- ->menu()
- ->setExpandSiblingNodesOfActiveBranch(true);
- ]]></programlisting>
- <para>Output:</para>
- <programlisting language="php"><![CDATA[
- <ul class="navigation">
- <li>
- <a title="Go Home" href="/">Home</a>
- </li>
- <li class="active">
- <a href="/products">Products</a>
- <ul>
- <li class="active">
- <a href="/products/server">Foo Server</a>
- <ul>
- <li class="active">
- <a href="/products/server/faq">FAQ</a>
- </li>
- <li>
- <a href="/products/server/editions">Editions</a>
- </li>
- <li>
- <a href="/products/server/requirements">System Requirements</a>
- </li>
- </ul>
- </li>
- <li>
- <a href="/products/studio">Foo Studio</a>
- </li>
- </ul>
- </li>
- <li>
- <a title="About us" href="/company/about">Company</a>
- </li>
- <li>
- <a href="/community">Community</a>
- </li>
- </ul>
- ]]></programlisting>
- </example>
- </sect4>
- <sect4 id="zend.view.helpers.initial.navigation.sitemap">
- <title>Sitemap Helper</title>
- <para>
- The Sitemap helper is used for generating <acronym>XML</acronym> sitemaps, as
- defined by the <ulink
- url="http://www.sitemaps.org/protocol.php">Sitemaps <acronym>XML</acronym>
- format</ulink>. Read more about <ulink
- url="http://en.wikipedia.org/wiki/Sitemaps">Sitemaps on Wikpedia</ulink>.
- </para>
- <para>
- By default, the sitemap helper uses
- <link linkend="zend.validate.sitemap">sitemap validators</link>
- to validate each element that is rendered. This can be disabled by
- calling <code>$helper->setUseSitemapValidators(false)</code>.
- </para>
- <note>
- <para>
- If you disable sitemap validators, the custom properties (see table)
- are not validated at all.
- </para>
- </note>
- <para>
- The sitemap helper also supports <ulink
- url="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">Sitemap XSD
- Schema</ulink> validation of the generated sitemap. This is disabled by default,
- since it will require a request to the Schema file. It can be
- enabled with
- <code>$helper->setUseSchemaValidation(true)</code>.
- </para>
- <table id="zend.view.helpers.initial.navigation.sitemap.elements">
- <title>Sitemap XML elements</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Element</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><code>loc</code></entry>
- <entry>
- Absolute <acronym>URL</acronym> to page. An absolute
- <acronym>URL</acronym> will be generated by the helper.
- </entry>
- </row>
- <row>
- <entry><code>lastmod</code></entry>
- <entry>
- <para>
- The date of last modification of the file, in <ulink
- url="http://www.w3.org/TR/NOTE-datetime">W3C Datetime</ulink>
- format. This time portion can be omitted if desired, and only use
- YYYY-MM-DD.
- </para>
- <para>
- The helper will try to retrieve the
- <code>lastmod</code> value from the page's
- custom property <code>lastmod</code> if it
- is set in the page. If the value is not a
- valid date, it is ignored.
- </para>
- </entry>
- </row>
- <row>
- <entry><code>changefreq</code></entry>
- <entry>
- <para>
- How frequently the page is likely to change.
- This value provides general information to
- search engines and may not correlate exactly
- to how often they crawl the page. Valid
- values are:
- </para>
- <itemizedlist>
- <listitem><para>always</para></listitem>
- <listitem><para>hourly</para></listitem>
- <listitem><para>daily</para></listitem>
- <listitem><para>weekly</para></listitem>
- <listitem><para>monthly</para></listitem>
- <listitem><para>yearly</para></listitem>
- <listitem><para>never</para></listitem>
- </itemizedlist>
- <para>
- The helper will try to retrieve the
- <code>changefreq</code> value from the page's
- custom property <code>changefreq</code> if it
- is set in the page. If the value is not
- valid, it is ignored.
- </para>
- </entry>
- </row>
- <row>
- <entry><code>priority</code></entry>
- <entry>
- <para>
- The priority of this <acronym>URL</acronym> relative to other
- <acronym>URL</acronym>s on your site. Valid values range from
- 0.0 to 1.0.
- </para>
- <para>
- The helper will try to retrieve the
- <code>priority</code> value from the page's
- custom property <code>priority</code> if it
- is set in the page. If the value is not
- valid, it is ignored.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <para>
- Methods in the sitemap helper:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <code>{get|set}FormatOutput()</code> gets/sets a flag
- indicating whether <acronym>XML</acronym> output should be formatted. This
- corresponds to the <code>formatOutput</code> property
- of the native <classname>DOMDocument</classname> class.
- Read more at
- <ulink url="http://php.net/domdocument">PHP: DOMDocument - Manual</ulink>.
- Default is <constant>FALSE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}UseXmlDeclaration()</code> gets/sets a
- flag indicating whether the <acronym>XML</acronym> declaration should be
- included when rendering. Default is <constant>TRUE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}UseSitemapValidators()</code> gets/sets a
- flag indicating whether sitemap validators should be
- used when generating the DOM sitemap. Default is
- <constant>TRUE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}UseSchemaValidation()</code> gets/sets a
- flag indicating whether the helper should use <acronym>XML</acronym> Schema
- validation when generating the DOM sitemap. Default is
- <constant>FALSE</constant>. If <constant>TRUE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}ServerUrl()</code> gets/sets server <acronym>URL</acronym>
- that will be prepended to non-absolute <acronym>URL</acronym>s in the
- <methodname>url()</methodname> method. If no server <acronym>URL</acronym> is
- specified, it will be determined by the helper.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>url()</methodname> is used to generate absolute
- <acronym>URL</acronym>s to pages.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getDomSitemap()</methodname> generates a DOMDocument
- from a given container.
- </para>
- </listitem>
- </itemizedlist>
- <example id="zend.view.helpers.initial.navigation.sitemap.example">
- <title>Rendering an XML sitemap</title>
- <para>
- This example shows how to render an <acronym>XML</acronym> sitemap based
- on the setup we did further up.
- </para>
- <programlisting language="php"><![CDATA[
- // In a view script or layout:
- // format output
- $this->navigation()
- ->sitemap()
- ->setFormatOutput(true); // default is false
- // other possible methods:
- // ->setUseXmlDeclaration(false); // default is true
- // ->setServerUrl('http://my.otherhost.com');
- // default is to detect automatically
- // print sitemap
- echo $this->navigation()->sitemap();
- ]]></programlisting>
- <para>
- Notice how pages that are invisible or pages with
- <acronym>ACL</acronym> roles incompatible with the view helper are filtered
- out:
- </para>
- <programlisting language="xml"><![CDATA[
- <?xml version="1.0" encoding="UTF-8"?>
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
- <url>
- <loc>http://www.example.com/</loc>
- </url>
- <url>
- <loc>http://www.example.com/products</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/server</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/server/faq</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/server/editions</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/server/requirements</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/studio</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/studio/customers</loc>
- </url>
- <url>
- <loc>http://www.example.com/prodcts/studio/support</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/about</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/about/investors</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/news</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/news/press</loc>
- </url>
- <url>
- <loc>http://www.example.com/archive</loc>
- </url>
- <url>
- <loc>http://www.example.com/community</loc>
- </url>
- <url>
- <loc>http://www.example.com/community/account</loc>
- </url>
- <url>
- <loc>http://forums.example.com/</loc>
- </url>
- </urlset>
- ]]></programlisting>
- <para>
- Render the sitemap using no <acronym>ACL</acronym> role (should filter out
- /community/account):
- </para>
- <programlisting language="php"><![CDATA[
- echo $this->navigation()
- ->sitemap()
- ->setFormatOutput(true)
- ->setRole();
- ]]></programlisting>
- <programlisting language="xml"><![CDATA[
- <?xml version="1.0" encoding="UTF-8"?>
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
- <url>
- <loc>http://www.example.com/</loc>
- </url>
- <url>
- <loc>http://www.example.com/products</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/server</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/server/faq</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/server/editions</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/server/requirements</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/studio</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/studio/customers</loc>
- </url>
- <url>
- <loc>http://www.example.com/prodcts/studio/support</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/about</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/about/investors</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/news</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/news/press</loc>
- </url>
- <url>
- <loc>http://www.example.com/archive</loc>
- </url>
- <url>
- <loc>http://www.example.com/community</loc>
- </url>
- <url>
- <loc>http://forums.example.com/</loc>
- </url>
- </urlset>
- ]]></programlisting>
- <para>
- Render the sitemap using a maximum depth of 1.
- </para>
- <programlisting language="php"><![CDATA[
- echo $this->navigation()
- ->sitemap()
- ->setFormatOutput(true)
- ->setMaxDepth(1);
- ]]></programlisting>
- <programlisting language="xml"><![CDATA[
- <?xml version="1.0" encoding="UTF-8"?>
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
- <url>
- <loc>http://www.example.com/</loc>
- </url>
- <url>
- <loc>http://www.example.com/products</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/server</loc>
- </url>
- <url>
- <loc>http://www.example.com/products/studio</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/about</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/about/investors</loc>
- </url>
- <url>
- <loc>http://www.example.com/company/news</loc>
- </url>
- <url>
- <loc>http://www.example.com/community</loc>
- </url>
- <url>
- <loc>http://www.example.com/community/account</loc>
- </url>
- <url>
- <loc>http://forums.example.com/</loc>
- </url>
- </urlset>
- ]]></programlisting>
- </example>
- <note>
- <title>UTF-8 encoding used by default</title>
- <para>
- By default, Zend Framework uses <acronym>UTF-8</acronym> as its default encoding,
- and, specific to this case, <classname>Zend_View</classname> does as well. Character
- encoding can be set differently on the view object itself using the
- <methodname>setEncoding()</methodname> method (or the
- <varname>encoding</varname> instantiation parameter). However, since
- <classname>Zend_View_Interface</classname> does not define accessors for encoding,
- it's possible that if you are using a custom view implementation with the Dojo view
- helper, you will not have a <methodname>getEncoding()</methodname> method, which is
- what the view helper uses internally for determining the character set in which to
- encode.
- </para>
- <para>
- If you do not want to utilize <acronym>UTF-8</acronym> in such a situation, you will
- need to implement a <methodname>getEncoding()</methodname> method in your custom
- view implementation.
- </para>
- </note>
- </sect4>
- <sect4 id="zend.view.helpers.initial.navigation.navigation">
- <title>Navigation Helper</title>
- <para>
- The Navigation helper is a proxy helper
- that relays calls to other navigational helpers. It can be
- considered an entry point to all navigation-related view tasks.
- The aforementioned navigational helpers are in the namespace
- <classname>Zend_View_Helper_Navigation</classname>, and would thus require
- the path <code>Zend/View/Helper/Navigation</code> to be added as
- a helper path to the view. With the proxy helper residing in the
- <classname>Zend_View_Helper</classname> namespace, it will always be
- available, without the need to add any helper paths to the view.
- </para>
- <para>
- The Navigation helper finds other helpers that implement the
- <classname>Zend_View_Helper_Navigation_Helper</classname>
- interface, which means custom view helpers can also be proxied.
- This would, however, require that the custom helper path is added
- to the view.
- </para>
- <para>
- When proxying to other helpers, the Navigation helper can inject
- its container, <acronym>ACL</acronym>/role, and translator. This means that you
- won't have to explicitly set all three in all navigational
- helpers, nor resort to injecting by means of
- <classname>Zend_Registry</classname> or static methods.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>findHelper()</methodname> finds the given helper,
- verifies that it is a navigational helper, and injects
- container, <acronym>ACL</acronym>/role and translator.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}InjectContainer()</code> gets/sets a flag
- indicating whether the container should be injected to
- proxied helpers. Default is <constant>TRUE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}InjectAcl()</code> gets/sets a flag
- indicating whether the <acronym>ACL</acronym>/role should be injected to
- proxied helpers. Default is <constant>TRUE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}InjectTranslator()</code> gets/sets a flag
- indicating whether the translator should be injected to
- proxied helpers. Default is <constant>TRUE</constant>.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>{get|set}DefaultProxy()</code> gets/sets the default
- proxy. Default is <code>'menu'</code>.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>render()</methodname> proxies to the render method of
- the default proxy.
- </para>
- </listitem>
- </itemizedlist>
- </sect4>
- </sect3>
|