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)
    ]);
}