diff --git a/CHANGELOG.md b/CHANGELOG.md index 094c6e1..7e351e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Yii Framework 2 bootstrap extension Change Log - Enh #38: Added object support for `content` option in `Collapse` class (pana1990, ItsReddi) - Enh #40: Added `visible` option to `yii\bootstrap\Tab` widget items (klimov-paul) +- Enh #41: Added `submenuOptions` support at `yii\bootstrap\Dropdown` (spikyjt, klimov-paul) 2.0.4 May 10, 2015 ------------------ diff --git a/Dropdown.php b/Dropdown.php index 7537b7b..35e12cd 100644 --- a/Dropdown.php +++ b/Dropdown.php @@ -48,6 +48,8 @@ class Dropdown extends Widget * - options: array, optional, the HTML attributes of the item. * - items: array, optional, the submenu items. The structure is the same as this property. * Note that Bootstrap doesn't support dropdown submenu. You have to add your own CSS styles to support it. + * - submenuOptions: array, optional, the HTML attributes for sub-menu container tag. If specified it will be + * merged with [[submenuOptions]]. * * To insert divider use ``. */ @@ -56,6 +58,12 @@ class Dropdown extends Widget * @var boolean whether the labels for header items should be HTML-encoded. */ public $encodeLabels = true; + /** + * @var array|null the HTML attributes for sub-menu container tags. + * If not set - [[options]] value will be used for it. + * @since 2.0.5 + */ + public $submenuOptions; /** @@ -64,6 +72,12 @@ class Dropdown extends Widget */ public function init() { + if ($this->submenuOptions === null) { + // copying of [[options]] kept for BC + // @todo separate [[submenuOptions]] from [[options]] completely before 2.1 release + $this->submenuOptions = $this->options; + unset($this->submenuOptions['id']); + } parent::init(); Html::addCssClass($this->options, 'dropdown-menu'); } @@ -88,7 +102,7 @@ class Dropdown extends Widget protected function renderItems($items, $options = []) { $lines = []; - foreach ($items as $i => $item) { + foreach ($items as $item) { if (isset($item['visible']) && !$item['visible']) { continue; } @@ -113,8 +127,10 @@ class Dropdown extends Widget $content = Html::a($label, $url, $linkOptions); } } else { - $submenuOptions = $options; - unset($submenuOptions['id']); + $submenuOptions = $this->submenuOptions; + if (isset($item['submenuOptions'])) { + $submenuOptions = array_merge($submenuOptions, $item['submenuOptions']); + } $content = Html::a($label, $url === null ? '#' : $url, $linkOptions) . $this->renderItems($item['items'], $submenuOptions); Html::addCssClass($itemOptions, 'dropdown-submenu'); diff --git a/tests/DropdownTest.php b/tests/DropdownTest.php index ef284e6..f0f4f45 100644 --- a/tests/DropdownTest.php +++ b/tests/DropdownTest.php @@ -41,10 +41,50 @@ class DropdownTest extends TestCase $expected = << - + +EXPECTED; + + $this->assertEqualsWithoutLE($expected, $out); + } }