Action Bar is a Yii 2 widget that render the drop-down list for manipulation selected GridView items and control buttons. The widget permits you to fully customize elements.
You can install the widget in two ways, using Composer or by downloading an archive file.
Run the following commands under your application folder:
php composer.phar require --prefer-dist "mickgeek/yii2-actionbar *"
Note: You can just do
composer update --prefer-dist
if pre-adding the following torequire
section of yourcomposer.json
:"mickgeek/yii2-actionbar": "*"
Download the archive file, unpack it to path/to/app/vendor/mickgeek
folder and modify the main configuration file like this:
$vendorDir = dirname(__DIR__) . '/vendor';
return [
'vendorPath' => $vendorDir,
'extensions' => array_merge(
require($vendorDir . '/yiisoft/extensions.php'),
[
'mickgeek/yii2-actionbar' => [
'name' => 'mickgeek/yii2-actionbar',
'version' => '9999999-dev',
'alias' => [
'@mickgeek/actionbar' => $vendorDir . '/mickgeek/yii2-actionbar',
],
],
]
),
...
];
where $vendorDir
is the path to the directory that stores vendor files.
use mickgeek\actionbar\Widget as ActionBar;
<?= ActionBar::widget([
'grid' => 'user-grid',
]) ?>
But first, add the action to your controller:
public function actions()
{
return [
'delete-multiple' => [
'class' => 'mickgeek\actionbar\DeleteMultipleAction',
'modelClass' => 'app\models\User',
],
];
}
Note: You can write your action without using
DeleteMultipleAction
class.
Tip: For information about properties and methods of the widget, see the bundled
DOCUMENTATION.md
.
Below are two examples showing some features of the widget.
The code in the view:
use yii\helpers\Url;
use mickgeek\actionbar\Widget as ActionBar;
<?= ActionBar::widget([
'grid' => 'user-grid',
'templates' => [
'{bulk-actions}' => ['class' => 'col-xs-4'],
'{create}' => ['class' => 'col-xs-8 text-right'],
],
'bulkActionsItems' => [
'Update Status' => [
'status-active' => 'Active',
'status-blocked' => 'Blocked',
],
'General' => ['general-delete' => 'Delete'],
],
'bulkActionsOptions' => [
'options' => [
'status-active' => [
'url' => Url::toRoute(['update-status', 'status' => 'active']),
'disabled' => !Yii::$app->user->can('updateUserStatus'),
],
'status-blocked' => [
'url' => Url::toRoute(['update-status', 'status' => 'blocked']),
'disabled' => !Yii::$app->user->can('updateUserStatus'),
],
'general-delete' => [
'url' => Url::toRoute('delete-multiple'),
'data-confirm' => 'Are you sure?',
'disabled' => !Yii::$app->user->can('deleteUser'),
],
],
'class' => 'form-control',
],
]) ?>
The code in the User controller:
public function actions()
{
return [
'delete-multiple' => [
'class' => 'mickgeek\actionbar\DeleteMultipleAction',
'modelClass' => 'app\models\User',
'beforeDeleteCallback' => function ($action) {
if (!Yii::$app->user->can('deleteOwnAccount', Yii::$app->getRequest()->post('ids'))) {
Yii::$app->getSession()->setFlash('error', 'You cannot delete your own account.');
$action->redirect();
Yii::$app->end();
}
},
'afterDeleteCallback' => function ($action) {
Yii::$app->getSession()->setFlash('success', 'The selected users have been deleted successfully.');
},
],
];
}
public function actionUpdateStatus($status)
{
...
}
The code:
use mickgeek\actionbar\Widget as ActionBar;
/* @var $model app\models\User */
<?= ActionBar::widget([
'templates' => [
'{back}' => ['class' => 'col-xs-4'],
'{update} {delete}' => ['class' => 'col-xs-8 text-right'],
],
'elements' => [
'back' => Html::a(
'<span class="glyphicon glyphicon-chevron-left"></span> ' . 'Back',
['/users/index'],
['class' => 'btn btn-default']
),
'update' => Html::a(
'<span class="glyphicon glyphicon-pencil"></span> ' . 'Update',
['/users/update', 'id' => $model->id],
['class' => 'btn btn-default']
),
'delete' => Html::a(
'<span class="glyphicon glyphicon-trash"></span> ' . 'Delete',
['/users/delete', 'id' => $model->id],
['class' => 'btn btn-default']
),
],
]) ?>
This extension is released under the BSD 3-Clause License. See the bundled LICENSE.md
for details.