| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338 |
- <?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(
- create_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_Link::RENDER_ALTERNATE</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_STYLESHEET</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_START</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_NEXT</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_PREV</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_CONTENTS</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_INDEX</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_GLOSSARY</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_COPYRIGHT</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_CHAPTER</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_SECTION</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_SUBSECTION</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_APPENDIX</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_HELP</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_BOOKMARK</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::RENDER_CUSTOM</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <constant>Zend_View_Helper_Navigation_Link::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}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}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>onlyActiveBranch</code>; whether only
- active branch should be 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>
- </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>
|