Class yii\bootstrap\ButtonDropdown
Inheritance | yii\bootstrap\ButtonDropdown » yii\bootstrap\Widget » yii\base\Widget |
---|---|
Uses Traits | yii\bootstrap\BootstrapWidgetTrait |
Available since extension's version | 2.0 |
Source Code | https://github.com/yiisoft/yii2-bootstrap/blob/master/src/ButtonDropdown.php |
ButtonDropdown renders a group or split button dropdown bootstrap component.
For example,
// a button group using Dropdown widget echo ButtonDropdown::widget([ 'label' => 'Action', 'dropdown' => [ 'items' => [ ['label' => 'DropdownA', 'url' => '/'], ['label' => 'DropdownB', 'url' => '#'], ], ], ]);
See also:
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
$clientEvents | array | The event handlers for the underlying Bootstrap JS plugin. | yii\bootstrap\BootstrapWidgetTrait |
$clientOptions | array | The options for the underlying Bootstrap JS plugin. | yii\bootstrap\BootstrapWidgetTrait |
$containerOptions | array | The HTML attributes for the container tag. | yii\bootstrap\ButtonDropdown |
$dropdown | array | The configuration array for yii\bootstrap\Dropdown. | yii\bootstrap\ButtonDropdown |
$dropdownClass | string | Name of a class to use for rendering dropdowns withing this widget. | yii\bootstrap\ButtonDropdown |
$encodeLabel | boolean | Whether the label should be HTML-encoded. | yii\bootstrap\ButtonDropdown |
$label | string | The button label | yii\bootstrap\ButtonDropdown |
$options | array | The HTML attributes of the button. | yii\bootstrap\ButtonDropdown |
$split | boolean | Whether to display a group of split-styled button group. | yii\bootstrap\ButtonDropdown |
$tagName | string | The tag to use to render the button | yii\bootstrap\ButtonDropdown |
Public Methods
Method | Description | Defined By |
---|---|---|
getView() | yii\bootstrap\BootstrapWidgetTrait | |
init() | Initializes the widget. | yii\bootstrap\BootstrapWidgetTrait |
run() | Renders the widget. | yii\bootstrap\ButtonDropdown |
Protected Methods
Method | Description | Defined By |
---|---|---|
registerClientEvents() | Registers JS event handlers that are listed in $clientEvents. | yii\bootstrap\BootstrapWidgetTrait |
registerPlugin() | Registers a specific Bootstrap plugin and the related events | yii\bootstrap\BootstrapWidgetTrait |
renderButton() | Generates the button dropdown. | yii\bootstrap\ButtonDropdown |
renderDropdown() | Generates the dropdown menu. | yii\bootstrap\ButtonDropdown |
Property Details
The HTML attributes for the container tag. The following special options are recognized:
- tag: string, defaults to "div", the name of the container tag.
See also \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
The configuration array for yii\bootstrap\Dropdown.
Name of a class to use for rendering dropdowns withing this widget. Defaults to yii\bootstrap\Dropdown.
Whether the label should be HTML-encoded.
The HTML attributes of the button.
See also \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
Whether to display a group of split-styled button group.
Method Details
public abstract \yii\web\View getView ( ) | ||
return | \yii\web\View | The view object that can be used to render views or view files. |
---|
abstract function getView();
Defined in: yii\bootstrap\BootstrapWidgetTrait::init()
Initializes the widget.
This method will register the bootstrap asset bundle. If you override this method, make sure you call the parent implementation first.
public void init ( ) |
public function init() { parent::init(); if (!isset($this->options['id'])) { $this->options['id'] = $this->getId(); } }
Defined in: yii\bootstrap\BootstrapWidgetTrait::registerClientEvents()
Registers JS event handlers that are listed in $clientEvents.
protected void registerClientEvents ( ) |
protected function registerClientEvents() { if (!empty($this->clientEvents)) { $id = $this->options['id']; $js = []; foreach ($this->clientEvents as $event => $handler) { $js[] = "jQuery('#$id').on('$event', $handler);"; } $this->getView()->registerJs(implode("\n", $js)); } }
Defined in: yii\bootstrap\BootstrapWidgetTrait::registerPlugin()
Registers a specific Bootstrap plugin and the related events
protected void registerPlugin ( $name ) | ||
$name | string | The name of the Bootstrap plugin |
protected function registerPlugin($name) { $view = $this->getView(); BootstrapPluginAsset::register($view); $id = $this->options['id']; if ($this->clientOptions !== false) { $options = empty($this->clientOptions) ? '' : Json::htmlEncode($this->clientOptions); $js = "jQuery('#$id').$name($options);"; $view->registerJs($js); } $this->registerClientEvents(); }
Generates the button dropdown.
protected string renderButton ( ) | ||
return | string | The rendering result. |
---|
protected function renderButton() { Html::addCssClass($this->options, ['widget' => 'btn']); $label = $this->label; if ($this->encodeLabel) { $label = Html::encode($label); } if ($this->split) { $options = $this->options; $this->options['data-toggle'] = 'dropdown'; Html::addCssClass($this->options, ['toggle' => 'dropdown-toggle']); unset($options['id']); $splitButton = Button::widget([ 'label' => '<span class="caret"></span>', 'encodeLabel' => false, 'options' => $this->options, 'view' => $this->getView(), ]); } else { $label .= ' <span class="caret"></span>'; $options = $this->options; Html::addCssClass($options, ['toggle' => 'dropdown-toggle']); $options['data-toggle'] = 'dropdown'; $splitButton = ''; } if (isset($options['href'])) { if (is_array($options['href'])) { $options['href'] = Url::to($options['href']); } } else { if ($this->tagName === 'a') { $options['href'] = '#'; } } return Button::widget([ 'tagName' => $this->tagName, 'label' => $label, 'options' => $options, 'encodeLabel' => false, 'view' => $this->getView(), ]) . "\n" . $splitButton; }
Generates the dropdown menu.
protected string renderDropdown ( ) | ||
return | string | The rendering result. |
---|
protected function renderDropdown() { $config = $this->dropdown; $config['clientOptions'] = false; $config['view'] = $this->getView(); /** @var Widget $dropdownClass */ $dropdownClass = $this->dropdownClass; return $dropdownClass::widget($config); }
Renders the widget.
public void run ( ) |
public function run() { // @todo use [[options]] instead of [[containerOptions]] and introduce [[buttonOptions]] before 2.1 release Html::addCssClass($this->containerOptions, ['widget' => 'btn-group']); $options = $this->containerOptions; $tag = ArrayHelper::remove($options, 'tag', 'div'); $this->registerPlugin('dropdown'); return implode("\n", [ Html::beginTag($tag, $options), $this->renderButton(), $this->renderDropdown(), Html::endTag($tag) ]); }