Как объединить два атрибута на select2 в yii2 - PullRequest
0 голосов
/ 11 ноября 2018

Я хочу приписать кодепос и кабупатен в одном выпадающем списке. и атрибуты kodepos и kabupaten включены в базу данных. Может кто-нибудь мне помочь? спасибо

<?= $form->field($model, 'origin')->label('Origin')->widget(Select2::classname(), [
    'data' => ArrayHelper::map(MKota::find()->all(),'kodepos','kodepos'),
    'theme' => Select2::THEME_BOOTSTRAP,
    'language' => 'en',
    'options' => ['placeholder' => 'Pilih Kode Pos','required' => true,'style'=>'width:500px','maxlength' => true],
    'pluginOptions' => [
    'allowClear' => true
    ],
    ]);
?>

<?= $form->field($model, 'origin_name')->label('Origin')->widget(Select2::classname(), [
    'data' => ArrayHelper::map(MKota::find()->all(),'kabupaten','kabupaten'),
    'theme' => Select2::THEME_BOOTSTRAP,
    'language' => 'en',
    'options' => ['placeholder' => 'Pilih Kota Asal','required' => true,'style'=>'width:500px','maxlength' => true],
    'pluginOptions' => [
    'allowClear' => true
    ],
    ]);
?>

1 Ответ

0 голосов
/ 11 ноября 2018

Вам нужно изменить ArrayHelper::map(), чтобы использовать closure для третьего параметра или параметр $to, и вернуть два поля, соединенные по своему усмотрению.

Имена полей не ясны, что вы хотите отобразить в виде текста в первом и втором раскрывающемся списке, поэтому я предполагаю, что целочисленное значение исходит из поля id.

Я добавлю код, который покажет объединенные id и kodepos в качестве текста для первого раскрывающегося списка и покажет объединенные id и kabupaten в качестве текста для второго раскрывающегося списка. Измените их соответственно в коде

<?= $form->field($model, 'origin')->label('Origin')->widget(Select2::classname(), [
    'data' => ArrayHelper::map(MKota::find()->all(),'kodepos',function($model){return $model->id.$model->kodepos}),
    'theme' => Select2::THEME_BOOTSTRAP,
    'language' => 'en',
    'options' => ['placeholder' => 'Pilih Kode Pos','required' => true,'style'=>'width:500px','maxlength' => true],
    'pluginOptions' => [
    'allowClear' => true
    ],
    ]);
?>

<?= $form->field($model, 'origin_name')->label('Origin')->widget(Select2::classname(), [
    'data' => ArrayHelper::map(MKota::find()->all(),'kabupaten',function($model){return $model->id.$model->kabupaten}),
    'theme' => Select2::THEME_BOOTSTRAP,
    'language' => 'en',
    'options' => ['placeholder' => 'Pilih Kota Asal','required' => true,'style'=>'width:500px','maxlength' => true],
    'pluginOptions' => [
    'allowClear' => true
    ],
    ]);
?>

EDIT:

Вы хотите, чтобы kodepos и kabupaten были в одном раскрывающемся списке, а не делали 2 раскрывающихся списка, поэтому измените код на следующий

<?= $form->field($model, 'origin')->label('Origin')->widget(Select2::classname(), [
    'data' => ArrayHelper::map(MKota::find()->all(),function($model){return $model->kodepos.$model->kabupaten}),function($model){return $model->kodepos.$model->kabupaten}),
    'theme' => Select2::THEME_BOOTSTRAP,
    'language' => 'en',
    'options' => ['placeholder' => 'Pilih Kode Pos','required' => true,'style'=>'width:500px','maxlength' => true],
    'pluginOptions' => [
    'allowClear' => true
    ],
    ]);
?>
...