yii2-dual-listbox ¶
Dual Listboxt for Yii framework 2.0.
Description ¶
softark\duallistbox\DualListbox widget is a Yii 2 wrapper for Bootstrap Dual Listbox.
It works with bootstrap 3, 4, or 5
Requirements ¶
- Yii Version 2.0.0 or later
- yii2-bootstrap, yii2-bootstrap4 or yii2-bootstrap5
- istvan-ujjmeszaros/bootstrap-duallistbox v.3.0.x or v.4.0.x
Usage ¶
Add
softark/yii2-dual-listbox
andistvan-ujjmeszaros/bootstrap-duallistbox
in your project'scomposer.json
, and let Composer configure your project.- You have to use a different version of
istvan-ujjmeszaros/bootstrap-duallistbox
depending on the bootstrap version. - For bootstrap 3, use
~3.0.0
:"require": { "php": ">=7.0.0", "yiisoft/yii2": "*", "yiisoft/yii2-bootstrap": "*", "istvan-ujjmeszaros/bootstrap-duallistbox": "~3.0.0", "softark/yii2-dual-listbox": "dev-master" },
For bootstrap 4 and 5, use
~4.0.0
:"require": { "php": ">=7.0.0", "yiisoft/yii2": "*", "yiisoft/yii2-bootstrap4": "*", // OR "yiisoft/yii2-bootstrap5": "*", "istvan-ujjmeszaros/bootstrap-duallistbox": "~4.0.0", "softark/yii2-dual-listbox": "dev-master" },
- You have to use a different version of
Use
softark\duallistbox\DualListbox::widget()
in place ofyii\helpers\Html::listBox()
,yii\helpers\Html::activeListBox()
, oryii\widgets\ActiveField::listBox()
in your view.Replacing Html::listBox() using name and selection
use softark\duallistbox\DualListbox; ... <?php $options = [ 'multiple' => true, 'size' => 20, ]; // echo Html::listBox($name, $selection, $items, $options); echo DualListbox::widget([ 'name' => $name, 'selection' => $selection, 'items' => $items, 'options' => $options, 'clientOptions' => [ 'moveOnSelect' => false, 'selectedListLabel' => 'Selected Items', 'nonSelectedListLabel' => 'Available Items', ], ]); ?>
Replacing Html::activeListBox() using model and attribute
use softark\duallistbox\DualListbox; ... <?php $options = [ 'multiple' => true, 'size' => 20, ]; // echo Html::activeListBox($model, $attribute, $items, $options); echo DualListbox::widget([ 'model' => $model, 'attribute' => $attribute, 'items' => $items, 'options' => $options, 'clientOptions' => [ 'moveOnSelect' => false, 'selectedListLabel' => 'Selected Items', 'nonSelectedListLabel' => 'Available Items', ], ]); ?>
Replacing ActiveField::listBox() using model and attribute
use softark\duallistbox\DualListbox; ... <?php $options = [ 'multiple' => true, 'size' => 20, ]; // echo $form->field($model, $attribute)->listBox($items, $options); echo $form->field($model, $attribute)->widget(DualListbox::className(),[ 'items' => $items, 'options' => $options, 'clientOptions' => [ 'moveOnSelect' => false, 'selectedListLabel' => 'Selected Items', 'nonSelectedListLabel' => 'Available Items', ], ]); ?>
Collect the user input in the server side, just as you do with a single Listbox with multiple selection. Note that the input value will be an array.
If you find difficulty in handling the user input, please read A Sample Code which demonstrates how to use a dual listbox to the data in array format.
Properties of softark\duallistbox\DualListbox ¶
name @var string
The input name.
selection @var array
The selected values.
model @var yii\base\Model
The model object.
attribute @var string
The attribute name.
items @var array
The option data items. The array keys are option values, and the array values are the corresponding option labels.
options @var array
The tag options for the listbox in terms of name-value pairs.
clientOptions @var array
The options for the Bootstrap Dual Listbox in terms of name-value pairs.
See Initialzation parameters object section of the official documentation of Bootstrap Dual Listbox for details.
The first 6 properties correspond to the parameters used in Html::listBox()
, Html::activeListBox()
and ActiveField::listBox()
.
Note that you have to use either name-selection pair or model-attribute pair. The former is for replacing Html::listBox()
and the latter is for Html::activeListBox()
and ActiveField::listBox()
.
History ¶
- Version 1.0.0 (2016-01-12)
- Tested on Yii 2.0.6
- Version 1.0.1 (2020-09-18)
- Supports both bootstrap3 and bootstrap4
- Version 1.0.2 (2022-09-08)
- Supports also bootstrap5
Pre-Selection on ActiveField and ActiveListBox?
Hi Softark,
First of all:
Thank you for this little piece of gold!
Just one question:
Is itsomehow possible to pre-select items when using the widget as replacement for ActiveListBox or ActiveField? ... Pre-selecting items with Html::listBox() replacement works without any problems...
But when I try for example:
$query = User::find()->all(); $items = ArrayHelper::map($query, 'id', 'username'); $selection = [ 2, 4 ]; $options = [ 'multiple' => true, 'size' => 20, ]; echo $form->field($model, 'username')->widget( DualListbox::className(),[ 'selection' => $selection, 'items' => $items, 'options' => $options, 'clientOptions' => [ 'moveOnSelect' => false, 'selectedListLabel' => 'Selected Items', 'nonSelectedListLabel' => 'Available Items', ], ] );
The "Selected Items" List is just empty.
If I'm too stupid and it should actually work,
could you point me in the right direction? Thanks. :)
Best Regards
name-selection / model-attribute
As I wrote in the article, you have to use name-selection pair when you want to replace Html::listBox(), and model-attribute pair when you want to replace Html::activeListBox() or ActiveField::listBox(). This is because the underlying methods require such parameters.
In Html::activeListBox() and ActiveField::listBox(), pre-selecton must be automatically constructed from the model's attribute, which is an array.
$model->users = [2, 4]; echo $form->field($model, 'users')->widget(DualListbox::className(),[ 'items' => $items, 'options' => $options, 'clientOptions' => [ ... ], ]);
Please take a look at the following wiki, too.
How to use Listbox and CheckboxList
Save the selected to database
Hi, I've successfully show the dual listbox in my view. But I don't know how save the selected value (right side box) to database.
Anybody know how to solve this?
Thanks before:)
How to save the selected items
Please take a look at another wiki article
How to Use ListBox and CheckboxList
And just replace the ListBox (or CheckboxList) with the dual list box.
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.