/** * {@inheritDoc} */ public function htmlify(AbstractPage $page, $escapeLabel = true, $addClassToListItem = false) { $renderer = $this->getView(); if ($partial = $page->get('partial')) { return $renderer->partial($partial, compact('page', 'escapeLabel', 'addClassToListItem')); } // get attribs for element $attribs = ['id' => $page->getId()]; if ($title = $page->getTitle()) { $attribs['title'] = $this->translate($title, $page->getTextDomain()); } if ($pageAttribs = $page->get('attribs')) { $attribs = array_merge($pageAttribs, $attribs); } if ($addClassToListItem === false) { if (!empty($attribs['class'])) { $attribs['class'] .= " {$page->getClass()}"; } else { $attribs['class'] = $page->getClass(); } } if (($label = $page->get('label_helper')) && ($helper = $this->view->plugin($label))) { if (method_exists($helper, 'setTranslatorTextDomain')) { $helper->setTranslatorTextDomain($page->getTextDomain()); } $label = $helper(); } elseif ($label = $page->getLabel()) { $label = $this->translate($label, $page->getTextDomain()); } $html = ''; if ($label) { if ($escapeLabel === true) { /* @var $escaper \Zend\View\Helper\EscapeHtml */ $escaper = $this->view->plugin('escapeHtml'); $html .= $escaper($label); } else { $html .= $label; } } $params = $replacedParams = $page->get('params'); if ($placeholders = $page->get('link_placeholders')) { foreach ($placeholders as $name => $value) { if (!isset($replacedParams[$name])) { $replacedParams[$name] = $value; } } } if ($replacedParams && ($placeholders = $this->getLinkPlaceholders())) { foreach ($replacedParams as $name => $value) { if (isset($placeholders[$value])) { $replacedParams[$name] = $placeholders[$value]; } } } $page->set('params', $replacedParams); // does page have a href if ($href = $page->getHref()) { $element = 'a'; $attribs['href'] = $page->get('uri') ?: $href; $attribs['target'] = $page->getTarget(); } else { $element = 'span'; } $page->set('params', $params); if ($ns = $page->get($this->decoratorNamespace)) { $html = $renderer->decorator($html, $ns); } $html = "<{$element}{$this->htmlAttribs($attribs)}>{$html}</{$element}>"; return $html; }