mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-17 07:51:12 +08:00
\yii\widgets\Menu improvement
This commit is contained in:
@ -9,6 +9,7 @@ namespace yii\widgets;
|
||||
|
||||
use Yii;
|
||||
use yii\base\Widget;
|
||||
use yii\helpers\ArrayHelper;
|
||||
use yii\helpers\Html;
|
||||
|
||||
/**
|
||||
@ -67,6 +68,13 @@ class Menu extends Widget
|
||||
* - options: array, optional, the HTML attributes for the menu container tag.
|
||||
*/
|
||||
public $items = array();
|
||||
/**
|
||||
* @var array list of HTML attributes for the menu container tag. This will be overwritten
|
||||
* by the "options" set in individual [[items]]. The following special options are recognized:
|
||||
*
|
||||
* - tag: string, defaults to "li", the tag name of the item container tags.
|
||||
*/
|
||||
public $itemOptions = array();
|
||||
/**
|
||||
* @var string the template used to render the body of a menu which is a link.
|
||||
* In this template, the token `{url}` will be replaced with the corresponding link URL;
|
||||
@ -110,7 +118,9 @@ class Menu extends Widget
|
||||
*/
|
||||
public $hideEmptyItems = true;
|
||||
/**
|
||||
* @var array the HTML attributes for the menu's container tag.
|
||||
* @var array the HTML attributes for the menu's container tag. The following special options are recognized:
|
||||
*
|
||||
* - tag: string, defaults to "ul", the tag name of the item container tags.
|
||||
*/
|
||||
public $options = array();
|
||||
/**
|
||||
@ -151,7 +161,9 @@ class Menu extends Widget
|
||||
$this->params = $_GET;
|
||||
}
|
||||
$items = $this->normalizeItems($this->items, $hasActiveChild);
|
||||
echo Html::tag('ul', $this->renderItems($items), $this->options);
|
||||
$options = $this->options;
|
||||
$tag = ArrayHelper::remove($options, 'tag', 'ul');
|
||||
echo Html::tag($tag, $this->renderItems($items), $options);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -164,7 +176,8 @@ class Menu extends Widget
|
||||
$n = count($items);
|
||||
$lines = array();
|
||||
foreach ($items as $i => $item) {
|
||||
$options = isset($item['options']) ? $item['options'] : array();
|
||||
$options = array_merge($this->itemOptions, ArrayHelper::getValue($item, 'options', array()));
|
||||
$tag = ArrayHelper::remove($options, 'tag', 'li');
|
||||
$class = array();
|
||||
if ($item['active']) {
|
||||
$class[] = $this->activeCssClass;
|
||||
@ -189,7 +202,7 @@ class Menu extends Widget
|
||||
'{items}' => $this->renderItems($item['items']),
|
||||
));
|
||||
}
|
||||
$lines[] = Html::tag('li', $menu, $options);
|
||||
$lines[] = Html::tag($tag, $menu, $options);
|
||||
}
|
||||
return implode("\n", $lines);
|
||||
}
|
||||
@ -203,13 +216,13 @@ class Menu extends Widget
|
||||
protected function renderItem($item)
|
||||
{
|
||||
if (isset($item['url'])) {
|
||||
$template = isset($item['template']) ? $item['template'] : $this->linkTemplate;
|
||||
$template = ArrayHelper::getValue($item, 'template', $this->linkTemplate);
|
||||
return strtr($template, array(
|
||||
'{url}' => Html::url($item['url']),
|
||||
'{label}' => $item['label'],
|
||||
));
|
||||
} else {
|
||||
$template = isset($item['template']) ? $item['template'] : $this->labelTemplate;
|
||||
$template = ArrayHelper::getValue($item, 'template', $this->labelTemplate);
|
||||
return strtr($template, array(
|
||||
'{label}' => $item['label'],
|
||||
));
|
||||
@ -284,5 +297,4 @@ class Menu extends Widget
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user