2

次のようなデータがあります。
ここに画像の説明を入力

これらのデータを使用して、select2 kartik コンボボックスを埋めます。これが私の yii2 コードです。

echo \kartik\widgets\Select2::widget([
                                'attribute' => 'pembuatSoal_id',
                                'model' => $model,
                                'data' => array_merge(["" => ""], \yii\helpers\ArrayHelper::map(\app\models\ViewUsernameGuru::find()->all(), "uname", "nama")),
                                'options' => ['placeholder' => 'Pilih Guru...', 'id' => 'guru-id', 'class' => "form-control"],
                                'pluginOptions' => [
                                    'allowClear' => true,
                                    'theme' => \kartik\widgets\Select2::THEME_BOOTSTRAP
                                ],
                            ]);

select2 の値としてunameフィールドを、表示値として nama を指定します。しかし、結果は次のようになります。
ここに画像の説明を入力

ただし、uname フィールドの値が数値の場合、select2 は自動的に select2 項目の配列インデックスに変更されます。

誰かが私に解決策を教えてくれることを願っています。

ありがとう。

4

3 に答える 3

1

これを試して:

  echo \kartik\widgets\Select2::widget([
                            'attribute' => 'pembuatSoal_id',
                            'model' => $model,
                            'data' => \yii\helpers\ArrayHelper::map(\app\models\ViewUsernameGuru::find()->all(), "uname", "nama")),
                            'options' => ['placeholder' => 'Pilih Guru...', 'id' => 'guru-id', 'class' => "form-control"],
                            'pluginOptions' => [
                                'allowClear' => true,
                                'theme' => \kartik\widgets\Select2::THEME_BOOTSTRAP
                            ],
                        ]);

ここで見つけてください

于 2015-09-07T10:59:47.220 に答える
0

言及されたように、問題は本当にarray_merge数値配列、数値文字列も再インデックスすることであり、この場合も結果は同じです

[9 => 'foo'] 
['9' => 'foo']

望ましい機能は、選択時に空の値を設定する「空の」最初のオプションを選択できる「通常の」選択タグの外観を持つことだったと思います。

私は検索を続け、配列の追加を行う簡単な解決策を見つけました

['' => 'Select value...'] + [0 => false, 1 => true]

最初のオプション要素が空の場合、設定に を含めないplaceholderでください。これは、オプション リストに表示されず、オプション名として使用されるためです。 allowClearfalse に設定するか、デフォルトの状態としてそのままにしておくことができます

その結果:

echo \kartik\widgets\Select2::widget([
    'attribute' => 'pembuatSoal_id',
    'model' => $model,
    'data' => (["" => "Pilih Guru..."] + \yii\helpers\ArrayHelper::map(\app\models\ViewUsernameGuru::find()->all(), "uname", "nama")),
    'options' => ['id' => 'guru-id', 'class' => "form-control"],
    'pluginOptions' => [
        'allowClear' => false, // false is default so could be left out
        'theme' => \kartik\widgets\Select2::THEME_BOOTSTRAP,
        'dropdownAutoWidth' => 'true', // to autocalculate width of selection list
    ],
]);

ソース: PHP: インデックスを再作成する代わりにキーを保持しながら 2 つの配列をマージしますか?

于 2016-12-15T23:15:47.130 に答える
0

array_merge が原因です。空の選択を許可するオプション "allowClear" = true があるのに、なぜそれを使用するのですか?

array_merge を削除すると、インデックスは変更されません。

これを追加して、空の選択を許可し、名前を付けます。

'filterWidgetOptions'=>[
            'pluginOptions' => ['allowClear' => true],
 ],
'filterInputOptions' => ['placeholder' => \Yii::t('app', 'Any Entry')],

フィルターの設定をテストしましたが、通常のウィジェットの設定は似ています:

'options' => ['placeholder' => 'Any entry'],
'pluginOptions' => [
    'allowClear' => true
],

私にとっては完璧に機能します...だからあなたの場合、それはただです

echo \kartik\widgets\Select2::widget([
'attribute' => 'pembuatSoal_id',
'model' => $model,
'data' => \yii\helpers\ArrayHelper::map(\app\models\ViewUsernameGuru::find()->all(), "uname", "nama"),
'options' => ['placeholder' => 'Pilih Guru...', 'id' => 'guru-id', 'class' => "form-control"],
'pluginOptions' => [
    'allowClear' => true,
    'theme' => \kartik\widgets\Select2::THEME_BOOTSTRAP
],
]);
于 2015-09-07T10:46:06.367 に答える