icon = $icon; } /** * Set's an icon class that will be used in an tag if no icon image is set * * @param string $iconCls The CSS class of the icon to use */ public function setIconCls($iconCls) { $this->iconCls = $iconCls; } /** * @param mixed $name */ public function setName($name) { $this->name = $name; } /** * @return mixed */ public function getName() { return $this->name; } /** * Set the tab label * * @param string $label */ public function setLabel($label) { $this->label = $label; } /** * Get the tab label * * @return string */ public function getLabel() { if (! $this->label) { return $this->title; } return $this->label; } /** * @param mixed $title */ public function setTitle($title) { $this->title = $title; } /** * Set the Url this tab points to * * @param string $url The Url to use for this tab */ public function setUrl($url) { if (is_string($url)) { $url = Url::fromPath($url); } $this->url = $url; } /** * Get the tab's target URL * * @return Url */ public function getUrl() { return $this->url; } /** * Set the parameters to be set for this tabs Url * * @param array $url The Url parameters to set */ public function setUrlParams(array $urlParams) { $this->urlParams = $urlParams; } /** * Set additional a tag attributes * * @param array $tagParams */ public function setTagParams(array $tagParams) { $this->tagParams = $tagParams; } public function setTargetBlank($value = true) { $this->targetBlank = $value; } public function setBaseTarget($value) { $this->baseTarget = $value; } /** * Create a new Tab with the given properties * * Allowed properties are all properties for which a setter exists * * @param array $properties An array of properties */ public function __construct(array $properties = array()) { foreach ($properties as $name => $value) { $setter = 'set' . ucfirst($name); if (method_exists($this, $setter)) { $this->$setter($value); } } } /** * Set this tab active (default) or inactive * * This is usually done through the tabs container widget, therefore it * is not a good idea to directly call this function * * @param bool $active Whether the tab should be active * * @return $this */ public function setActive($active = true) { $this->active = (bool) $active; return $this; } /** * @see Widget::render() */ public function render() { $view = $this->view(); $classes = array(); if ($this->active) { $classes[] = 'active'; } $caption = $view->escape($this->getLabel()); $tagParams = $this->tagParams; if ($this->targetBlank) { // add warning to links that open in new tabs to improve accessibility, as recommended by WCAG20 G201 $caption .= ' opens in new window '; $tagParams['target'] ='_blank'; } if ($this->title) { if ($tagParams !== null) { $tagParams['title'] = $this->title; $tagParams['aria-label'] = $this->title; } else { $tagParams = array( 'title' => $this->title, 'aria-label' => $this->title ); } } if ($this->baseTarget !== null) { $tagParams['data-base-target'] = $this->baseTarget; } if ($this->icon !== null) { if (strpos($this->icon, '.') === false) { $caption = $view->icon($this->icon) . $caption; } else { $caption = $view->img($this->icon, null, array('class' => 'icon')) . $caption; } } if ($this->url !== null) { $this->url->overwriteParams($this->urlParams); if ($tagParams !== null) { $params = $view->propertiesToString($tagParams); } else { $params = ''; } $tab = sprintf( '%s', $this->view()->escape($this->url->getAbsoluteUrl()), $params, $caption ); } else { $tab = $caption; } $class = empty($classes) ? '' : sprintf(' class="%s"', implode(' ', $classes)); return '
  • ' . $tab . "
  • \n"; } }