首页 > 解决方案 > yii2 kartik select2 小部件不显示列表的第一个元素

问题描述

我是 js 开发人员,但我的任务是解决我们的 php Yii2 站点中的一些问题。我是 yii2 和 php 的新手,所以我坚持使用 kartik yii2 小部件。代码不是我写的。当我从列表中选择第一个选项时 - 它正确保存到 db 但在小部件本身中显示第二项,而不是第一项。当我从列表中选择所有项目时,小部件也会剪切第一个项目。但是 db 中的数据是正确的。

这是代码:

   <?php
    ...
   function sortArray($a, $b)
   {
     return strcmp($a, $b);
   }

 $projects = ArrayHelper::map($projects, 'id', 'title');
 usort($projects, 'sortArray');
 ?>
<div class="x_title"><h3><?= Html::encode($this->title) ?></h3></div>

<div class="x_content">
    <?php $form = ActiveForm::begin(); ?>
    <div class="form-group">
        <?= Select2::widget([
            'name' => 'projects[]',
            'options' => ['placeholder' => 'Выберите проект...'],
            'language' => 'ru',
            'value' => array_keys(ArrayHelper::map($model->projects, 'id', 'title')),
            'data' => $projects,
            'pluginOptions' => [
                'allowClear' => true,
                'multiple' => true
            ],
        ]) ?>
    </div>
    <div class="form-group">
        <?= Html::submitButton('Обновить', ['class' => 'btn btn-primary']) ?>
    </div>
    <?php ActiveForm::end() ?>
</div>

我检查“全选”然后按“更新”按钮

我检查

按下第一个项目后消失,如下一个屏幕所示。

列表中的第一项不存在

但所有项目都保存到数据库:

但所有项目都保存到数据库

如何克服我的问题并使选择小部件正常工作?我很累。提前致谢!

标签: phparraysyii2jquery-select2kartik-v

解决方案


You should have to add 'maintainOrder' => true, for example:

 <?= Select2::widget([
        'name' => 'projects[]',
        'maintainOrder' => true, // add here the property
        'options' => ['placeholder' => 'Выберите проект...'],
        'language' => 'ru',
        'value' => array_keys(ArrayHelper::map($model->projects, 'id', 'title')),
        'data' => $projects,
        'pluginOptions' => [
            'allowClear' => true,
            'multiple' => true
        ],
  ]) ?>

推荐阅读