Class yii\bootstrap5\Progress

Inheritanceyii\bootstrap5\Progress » yii\bootstrap5\Widget » yii\base\Widget
Uses Traitsyii\bootstrap5\BootstrapWidgetTrait
Source Code https://github.com/yiisoft/yii2-bootstrap5/blob/master/src/Progress.php

Progress renders a bootstrap progress bar component.

For example,

// default with label
echo Progress::widget([
    'percent' => 60,
    'label' => 'test'
]);
// or
echo Progress::widget([
    'bars' => [
        ['percent' => 60, 'label' => 'test']
    ]
]);

// styled
echo Progress::widget([
    'percent' => 65,
    'barOptions' => ['class' => 'bg-danger']
]);
// or
echo Progress::widget([
    'bars' => [
        ['percent' => 65, 'options' => ['class' => 'bg-danger']]
    ]
]);

// striped
echo Progress::widget([
    'percent' => 70,
    'barOptions' => ['class' => ['bg-warning', 'progress-bar-striped']]
]);
// or
echo Progress::widget([
    'bars' => [
        ['percent' => 70, 'options' => ['class' => ['bg-warning', 'progress-bar-striped']]]
    ]
]);

// striped animated
echo Progress::widget([
    'percent' => 70,
    'barOptions' => ['class' => ['bg-success', 'progress-bar-animated', 'progress-bar-striped']]
]);
// or
echo Progress::widget([
    'bars' => [
        ['percent' => 70, 'options' => ['class' => ['bg-success', 'progress-bar-animated', 'progress-bar-striped']]]
    ]
]);

// stacked bars
echo Progress::widget([
    'bars' => [
        ['percent' => 30, 'options' => ['class' => 'bg-danger']],
        ['percent' => 30, 'label' => 'test', 'options' => ['class' => 'bg-success']],
        ['percent' => 35, 'options' => ['class' => 'bg-warning']],
    ]
]);

See also https://getbootstrap.com/docs/5.1/components/progress/.

Public Properties

Hide inherited properties

Property Type Description Defined By
$barOptions array The HTML attributes of the bar. yii\bootstrap5\Progress
$bars array A set of bars that are stacked together to form a single progress bar. yii\bootstrap5\Progress
$clientEvents array The event handlers for the underlying Bootstrap JS plugin. yii\bootstrap5\BootstrapWidgetTrait
$clientOptions array|false The options for the underlying Bootstrap JS plugin/component. yii\bootstrap5\BootstrapWidgetTrait
$label string The button label. yii\bootstrap5\Progress
$options array The HTML attributes for the widget container tag. yii\bootstrap5\Widget
$percent integer The amount of progress as a percentage. yii\bootstrap5\Progress

Protected Methods

Hide inherited methods

Method Description Defined By
registerClientEvents() Registers JS event handlers that are listed in $clientEvents. yii\bootstrap5\BootstrapWidgetTrait
registerPlugin() Registers a specific Bootstrap plugin/component and the related events. yii\bootstrap5\BootstrapWidgetTrait
renderBar() Generates a progress bar. yii\bootstrap5\Progress
renderProgress() Renders the progress. yii\bootstrap5\Progress

Property Details

Hide inherited properties

$barOptions public property (available since version 2.0.6)

The HTML attributes of the bar. This property will only be considered if $bars is empty

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

public array $barOptions = []
$bars public property

A set of bars that are stacked together to form a single progress bar. Each bar is an array of the following structure:

[
    // required, the amount of progress as a percentage.
    'percent' => 30,
    // optional, the label to be displayed on the bar
    'label' => '30%',
    // optional, array, additional HTML attributes for the bar tag
    'options' => [],
]
public array $bars null
$label public property

The button label. This property will only be considered if $bars is empty

public string $label null
$percent public property

The amount of progress as a percentage. This property will only be considered if $bars is empty

public integer $percent 0

Method Details

Hide inherited methods

init() public method

public void init ( )

                public function init(): void
{
    parent::init();
    Html::addCssClass($this->options, [
        'widget' => 'progress',
    ]);
}

            
registerClientEvents() protected method

Defined in: yii\bootstrap5\BootstrapWidgetTrait::registerClientEvents()

Registers JS event handlers that are listed in $clientEvents.

protected void registerClientEvents ( ?string $name null )
$name ?string

                protected function registerClientEvents(?string $name = null): void
{
    if (!empty($this->clientEvents)) {
        $id = $this->options['id'];
        $js = [];
        $appendix = ($name === 'dropdown') ? '.parentElement' : '';
        foreach ($this->clientEvents as $event => $handler) {
            $js[] = "document.getElementById('$id')$appendix.addEventListener('$event', $handler);";
        }
        $this->getView()->registerJs(implode("\n", $js));
    }
}

            
registerPlugin() protected method

Defined in: yii\bootstrap5\BootstrapWidgetTrait::registerPlugin()

Registers a specific Bootstrap plugin/component and the related events.

protected void registerPlugin ( string $name )
$name string

The name of the Bootstrap plugin

                protected function registerPlugin(string $name): void
{
    /**
     * @see https://github.com/twbs/bootstrap/blob/v5.2.0/js/index.esm.js
     */
    $jsPlugins = [
        'alert',
        'button',
        'carousel',
        'collapse',
        'dropdown',
        'modal',
        'offcanvas',
        'popover',
        'scrollspy',
        'tab',
        'toast',
        'tooltip',
    ];
    if (in_array($name, $jsPlugins, true)) {
        $view = $this->getView();
        BootstrapPluginAsset::register($view);
        // 'popover', 'toast' and 'tooltip' plugins not activates via data attributes
        if ($this->clientOptions !== false || in_array($name, ['popover', 'toast', 'tooltip'], true)) {
            $name = ucfirst($name);
            $id = $this->options['id'];
            $options = empty($this->clientOptions) ? '{}' : Json::htmlEncode($this->clientOptions);
            $view->registerJs("(new bootstrap.$name('#$id', $options));");
        }
        $this->registerClientEvents($name);
    }
}

            
renderBar() protected method

Generates a progress bar.

protected string renderBar ( integer $percent, string $label '', array $options = [] )
$percent integer

The percentage of the bar

$label string

Optional, the label to display at the bar

$options array

The HTML attributes of the bar

return string

The rendering result.

                protected function renderBar(int $percent, string $label = '', array $options = []): string
{
    $options = array_merge($options, [
        'role' => 'progressbar',
        'aria' => [
            'valuenow' => $percent,
            'valuemin' => 0,
            'valuemax' => 100,
        ],
    ]);
    Html::addCssClass($options, [
        'widget' => 'progress-bar',
    ]);
    Html::addCssStyle($options, [
        'width' => $percent . '%',
    ], true);
    return Html::tag('div', $label, $options);
}

            
renderProgress() protected method

Renders the progress.

protected string renderProgress ( )
return string

The rendering result.

throws \yii\base\InvalidConfigException

if the "percent" option is not set in a stacked progress bar.

throws Exception

                protected function renderProgress(): string
{
    $out = Html::beginTag('div', $this->options) . "\n";
    if (empty($this->bars)) {
        $this->bars = [
            [
                'label' => $this->label,
                'percent' => $this->percent,
                'options' => $this->barOptions,
            ],
        ];
    }
    $bars = [];
    foreach ($this->bars as $bar) {
        $label = ArrayHelper::getValue($bar, 'label', '');
        if (!isset($bar['percent'])) {
            throw new InvalidConfigException("The 'percent' option is required.");
        }
        $options = ArrayHelper::getValue($bar, 'options', []);
        $bars[] = $this->renderBar($bar['percent'], $label, $options);
    }
    $out .= implode("\n", $bars) . "\n";
    $out .= Html::endTag('div');
    return $out;
}

            
run() public method

public string run ( )
throws \yii\base\InvalidConfigException

                public function run(): string
{
    BootstrapAsset::register($this->getView());
    return $this->renderProgress();
}