Как вывести правиль вывести yii2-widget-select2 в виджете yii2-multiple-input

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Как вывести правиль вывести yii2-widget-select2 в виджете yii2-multiple-input

Сообщение alexa777 »

В общем такая задача вывести yii2-widget-select2 с Ajax поиском в виджете yii2-multiple-input.
В общем чтобы вот такая картина была
https://screenshots.firefox.com/BXaxdqF9mq1Q8U0f/null

В принципе я yii2-widget-select2 вставил в виджет yii2-multiple-input и даже сделал сохранение. Но столкнулся с проблемой, не могу сделать чтобы при заходе в редактирование отображались сохраненные данные.

В этих формах я нахожу посты и сохраняю их ID в отдельной БД
[id, item_id, marker]
marker нужен для поиска нужных строк в БД

Конечно если я сохраню всего одно значение То оно выводится, проблемы начинаются когда сохраняю несколько строк в БД. Ни как не пойму как вывести массив в yii2-widget-select

Вот моя форма

Код: Выделить всё

<?php
        $itemDesc = empty($model->item_id) ? '' : common\models\Item::findOne($model->item_id)->title;
        echo $form->field($model, 'item_id')->widget(MultipleInput::className(), [
            'columns' => [
                [
                    'name' => 'slide',
                    'type' => \kartik\select2\Select2::className(),
                    'options' => [
                        'initValueText' => $itemDesc, // set the initial display text
                        'pluginOptions' => [
                            'allowClear' => true,
                            'minimumInputLength' => 3,
                            'language' => 'ru',
                            'ajax' => [
                                'url' => \yii\helpers\Url::to(['item-list']),
                                'dataType' => 'json',
                                'data' => new JsExpression('function(params) { return {q:params.term}; }')
                            ],
                            'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
                            'templateResult' => new JsExpression('function(item_id) { return item_id.text; }'),
                            'templateSelection' => new JsExpression('function (item_id) { return item_id.text; }'),
                        ],
                    ],
                    'items' => [
                        '0' => 'Saturday',
                        '1' => 'Monday'
                    ],
                ],
            ]
        ])->label(false);
        ?>
Вот Экшен

Код: Выделить всё

public function actionIndex() {
        $model = $this->findModel();
        if ($model->load(Yii::$app->request->post())) {

            $array = $model->item_id;
            foreach ($array['slide'] as $key => $value){
                $model = new Slider();
                $model->item_id = $value;
                $model->marker = 'slider';
                $model->save();

            }
            return $this->redirect(['index']);
        }

        return $this->render('index', [
                    'model' => $model,
        ]);

    protected function findModel()
    {
        if (($model = Slider::find()->andWhere(['marker' => 'slider'])->one())) {
            return $model;
        }
        return new Slider();
    }
В общем я пробовал получить все записи с маркером slide

Код: Выделить всё

$model = Slider::find()->andWhere(['marker' => 'slider'])->all())
Выдает ошибку
Error
Call to a member function load() on array
В общем как передать это массив в форму чтобы в ней выводились все пункты которые были добавлены ранее?

Код: Выделить всё

 $itemDesc = empty($model->item_id) ? '' : common\models\Item::findOne($model->item_id)->title;
                   'options' => [
                        'initValueText' => $itemDesc, // set the initial display text
Ответить