Class yii\bootstrap\ButtonDropdown

Inheritanceyii\bootstrap\ButtonDropdown » yii\bootstrap\Widget » yii\base\Widget
Uses Traitsyii\bootstrap\BootstrapWidgetTrait
Available since extension's version2.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

Hide inherited 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

Hide inherited 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

Hide inherited 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

Hide inherited properties

$containerOptions public property (available since version 2.0.1)

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.

$dropdown public property

The configuration array for yii\bootstrap\Dropdown.

public array $dropdown = []
$dropdownClass public property (available since version 2.0.7)

Name of a class to use for rendering dropdowns withing this widget. Defaults to yii\bootstrap\Dropdown.

public string $dropdownClass 'yii\bootstrap\Dropdown'
$encodeLabel public property

Whether the label should be HTML-encoded.

public boolean $encodeLabel true
$label public property

The button label

public string $label 'Button'
$options public property

The HTML attributes of the button.

See also \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.

public array $options = []
$split public property

Whether to display a group of split-styled button group.

public boolean $split false
$tagName public property

The tag to use to render the button

public string $tagName 'button'

Method Details

Hide inherited methods

getView() public abstract method

Defined in: yii\bootstrap\BootstrapWidgetTrait::getView()

See also \yii\base\Widget::getView().

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();

            
init() public method

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

            
registerClientEvents() protected method (available since version 2.0.2)

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

            
registerPlugin() protected method

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

            
renderButton() protected method

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

            
renderDropdown() protected method

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

            
run() public method

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