|
|
|
@ -9,6 +9,7 @@ namespace yii\widgets;
|
|
|
|
|
|
|
|
|
|
use Yii; |
|
|
|
|
use yii\base\Widget; |
|
|
|
|
use yii\helpers\ArrayHelper; |
|
|
|
|
use yii\helpers\Html; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -16,15 +17,15 @@ use yii\helpers\Html;
|
|
|
|
|
* |
|
|
|
|
* The main property of Menu is [[items]], which specifies the possible items in the menu. |
|
|
|
|
* A menu item can contain sub-items which specify the sub-menu under that menu item. |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* Menu checks the current route and request parameters to toggle certain menu items |
|
|
|
|
* with active state. |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* Note that Menu only renders the HTML tags about the menu. It does do any styling. |
|
|
|
|
* You are responsible to provide CSS styles to make it look like a real menu. |
|
|
|
|
* |
|
|
|
|
* The following example shows how to use Menu: |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* ~~~ |
|
|
|
|
* echo Menu::widget(array( |
|
|
|
|
* 'items' => array( |
|
|
|
@ -40,7 +41,7 @@ use yii\helpers\Html;
|
|
|
|
|
* ), |
|
|
|
|
* )); |
|
|
|
|
* ~~~ |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* @author Qiang Xue <qiang.xue@gmail.com> |
|
|
|
|
* @since 2.0 |
|
|
|
|
*/ |
|
|
|
@ -68,6 +69,13 @@ class Menu extends Widget
|
|
|
|
|
*/ |
|
|
|
|
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; |
|
|
|
|
* while `{label}` will be replaced with the link text. |
|
|
|
@ -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(); |
|
|
|
|
/** |
|
|
|
@ -125,7 +135,7 @@ class Menu extends Widget
|
|
|
|
|
public $lastItemCssClass; |
|
|
|
|
/** |
|
|
|
|
* @var string the route used to determine if a menu item is active or not. |
|
|
|
|
* If not set, it will use the route of the current request. |
|
|
|
|
* If not set, it will use the route of the current request. |
|
|
|
|
* @see params |
|
|
|
|
* @see isItemActive |
|
|
|
|
*/ |
|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|