title = $title; return $this; } /** * Return the tooltip text for the badge * * @return string */ public function getTitle() { return $this->title; } /** * Set the state identifier to use * * @param string $state * * @return $this */ public function setState($state) { $this->state = $state; return $this; } /** * Return the state identifier to use * * @return string */ public function getState() { return $this->state; } /** * Return the amount of items represented by the badge * * @return int */ abstract public function getCount(); /** * Render the given navigation item as HTML anchor with a badge * * @param NavigationItem $item * * @return string */ public function render(NavigationItem $item = null) { if ($item === null) { $item = $this->getItem(); } $cssClass = ''; if ($item->getCssClass() !== null) { $cssClass = ' ' . $item->getCssClass(); } $item->setCssClass('badge-nav-item' . $cssClass); $this->setEscapeLabel(false); $label = $this->view()->escape($item->getLabel()); $item->setLabel($this->renderBadge() . $label); $html = parent::render($item); return $html; } /** * Render the badge * * @return string */ protected function renderBadge() { if ($count = $this->getCount()) { if ($count > 1000000) { $count = round($count, -6) / 1000000 . 'M'; } elseif ($count > 1000) { $count = round($count, -3) / 1000 . 'k'; } $view = $this->view(); return sprintf( '%s', $view->escape($this->getTitle()), $view->escape($this->getState()), $count ); } return ''; } }