Source of file Breadcrumbs.php
Size: 8,519 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/View/Helper/Navigation/Breadcrumbs.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\View\Helper\Navigation; use Zend\Navigation\AbstractContainer; use Zend\Navigation\Page\AbstractPage; use Zend\View; use Zend\View\Exception; /** * Helper for printing breadcrumbs */ class Breadcrumbs extends AbstractHelper { /** * Whether last page in breadcrumb should be hyperlinked * * @var bool */ protected $linkLast = false; /** * The minimum depth a page must have to be included when rendering * * @var int */ protected $minDepth = 1; /** * Partial view script to use for rendering menu * * @var string|array */ protected $partial; /** * Breadcrumbs separator string * * @var string */ protected $separator = ' > '; /** * Helper entry point * * @param string|AbstractContainer $container container to operate on * @return Breadcrumbs */ public function __invoke($container = null) { if (null !== $container) { $this->setContainer($container); } return $this; } /** * Renders helper * * Implements {@link HelperInterface::render()}. * * @param AbstractContainer $container [optional] container to render. Default is * to render the container registered in the helper. * @return string */ public function render($container = null) { $partial = $this->getPartial(); if ($partial) { return $this->renderPartial($container, $partial); } return $this->renderStraight($container); } /** * Renders breadcrumbs by chaining 'a' elements with the separator * registered in the helper * * @param AbstractContainer $container [optional] container to render. Default is * to render the container registered in the helper. * @return string */ public function renderStraight($container = null) { $this->parseContainer($container); if (null === $container) { $container = $this->getContainer(); } // find deepest active if (!$active = $this->findActive($container)) { return ''; } $active = $active['page']; // put the deepest active page last in breadcrumbs if ($this->getLinkLast()) { $html = $this->htmlify($active); } else { /** @var \Zend\View\Helper\EscapeHtml $escaper */ $escaper = $this->view->plugin('escapeHtml'); $html = $escaper( $this->translate($active->getLabel(), $active->getTextDomain()) ); } // walk back to root while ($parent = $active->getParent()) { if ($parent instanceof AbstractPage) { // prepend crumb to html $html = $this->htmlify($parent) . $this->getSeparator() . $html; } if ($parent === $container) { // at the root of the given container break; } $active = $parent; } return strlen($html) ? $this->getIndent() . $html : ''; } /** * Renders the given $container by invoking the partial view helper * * The container will simply be passed on as a model to the view script, * so in the script it will be available in <code>$this->container</code>. * * @param AbstractContainer $container [optional] container to pass to view script. * Default is to use the container registered * in the helper. * @param string|array $partial [optional] partial view script to use. * Default is to use the partial registered * in the helper. If an array is given, it * is expected to contain two values; the * partial view script to use, and the module * where the script can be found. * @throws Exception\RuntimeException if no partial provided * @throws Exception\InvalidArgumentException if partial is invalid array * @return string helper output */ public function renderPartial($container = null, $partial = null) { $this->parseContainer($container); if (null === $container) { $container = $this->getContainer(); } if (null === $partial) { $partial = $this->getPartial(); } if (empty($partial)) { throw new Exception\RuntimeException( 'Unable to render menu: No partial view script provided' ); } // put breadcrumb pages in model $model = array( 'pages' => array(), 'separator' => $this->getSeparator() ); $active = $this->findActive($container); if ($active) { $active = $active['page']; $model['pages'][] = $active; while ($parent = $active->getParent()) { if ($parent instanceof AbstractPage) { $model['pages'][] = $parent; } else { break; } if ($parent === $container) { // break if at the root of the given container break; } $active = $parent; } $model['pages'] = array_reverse($model['pages']); } /** @var \Zend\View\Helper\Partial $partialHelper */ $partialHelper = $this->view->plugin('partial'); if (is_array($partial)) { if (count($partial) != 2) { throw new Exception\InvalidArgumentException( 'Unable to render menu: A view partial supplied as ' . 'an array must contain two values: partial view ' . 'script and module where script can be found' ); } return $partialHelper($partial[0], $model); } return $partialHelper($partial, $model); } /** * Sets whether last page in breadcrumbs should be hyperlinked * * @param bool $linkLast whether last page should be hyperlinked * @return Breadcrumbs */ public function setLinkLast($linkLast) { $this->linkLast = (bool) $linkLast; return $this; } /** * Returns whether last page in breadcrumbs should be hyperlinked * * @return bool */ public function getLinkLast() { return $this->linkLast; } /** * Sets which partial view script to use for rendering menu * * @param string|array $partial partial view script or null. If an array is * given, it is expected to contain two * values; the partial view script to use, * and the module where the script can be * found. * @return Breadcrumbs */ public function setPartial($partial) { if (null === $partial || is_string($partial) || is_array($partial)) { $this->partial = $partial; } return $this; } /** * Returns partial view script to use for rendering menu * * @return string|array|null */ public function getPartial() { return $this->partial; } /** * Sets breadcrumb separator * * @param string $separator separator string * @return Breadcrumbs */ public function setSeparator($separator) { if (is_string($separator)) { $this->separator = $separator; } return $this; } /** * Returns breadcrumb separator * * @return string breadcrumb separator */ public function getSeparator() { return $this->separator; } } |