Kartik Select2 добавить клиента когда не нашел результата

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

Kartik Select2 добавить клиента когда не нашел результата

Сообщение hollanditkzn »

Не пойму как тут прикрепить скриншот, объясню так, мне нужно если ничего не нашел в списке, вместо записи "Совпадений не найдено", то показывала ссылку на добавление клиента. У меня внутри формы где находится select 2 модели, один на добавление заказа, второй проверяет телефон клиента на уникальность, где находится select2. Если телефон не найден, то система предлагает создать клиента. Наверное понятно описал, то есть когда была no result указывал ссылку. Я пробовал изучать документации но много чего мне там не понятно.
Первый способ пробовал

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

<?= $form->field($client, 'phone')->widget(Select2::className(), [
                    'data' => ArrayHelper::map(Client::find()->all(), 'id', 'phone'),
                    'options' => ['placeholder' => 'Введите номер телефона'],
                    'pluginOptions' => [
                        'allowClear' => true,
'language' => [
                                'noResults' => new JsExpression('function () { return "<button type=\"button\" class=\"btn btn-info btn-xs\">Добавить в справочник</button>"; }'),
                            ],
                    ]
            ])?>
, но так я получаю взамен <button type=\"button\" class=\"btn btn-info btn-xs\">Добавить Клиента</button>
Пробовал так В форме

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

<?php $clientPhone = empty($client->id) ? '' : Client::findOne($client->id)->phone; ?>
            <?= $form->field($client, 'phone')->widget(Select2::className(), [
//                    'data' => ArrayHelper::map(Client::find()->all(), 'id', 'phone'),
                    'options' => ['placeholder' => 'Введите номер телефона'],
                    'pluginOptions' => [
                        'allowClear' => true,
                        'ajax' => [
                            'url' => Url::to(['client/client-items']),
                            'dataType' => 'json',
                            'data' => new JsExpression('function(params) { return {id:params.term}; }')
                        ],
                        'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
                        'templateResult' => new JsExpression('function(client) { return client.phone; }'),
                        'templateSelection' => new JsExpression('function (client) { return client.phone; }'),
                    ]
            ])?>
В контроллере ClientController

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

public function actionsClientItem($q = null, $id = null)
    {
        Yii::$app->response->format = Response::FORMAT_JSON;
        $out = ['result' => ['id' => '', 'text' => '']];
        if (!is_null($q)) {
            $query = new Query();
            $query->select('id, phone AS tel')
                ->from('client')
                ->where(['like', 'phone', $q])
                ->limit(20);
            $command = $query->createCommand();
            $data = $command->queryAll();
            $out['results'] = array_values($data);
        } elseif ($id > 0){
            $out['results'] = ['id' => $id, 'text' => Client::find($id)->phone];
        } return $out;
    }
Если нужно, то контроллер создание заказа подключены 2 модели если нужно могу весь код прописать его, но скорее он тут не нужен. Модели связаны

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

public function actionCreate()
    {
        $model = new Zakaz();
        $client = new Client();
        ...
        }

        return $this->render('create', [
            'model' => $model,
            'client' => $client,
        ]);
    }
hollanditkzn
Сообщения: 95
Зарегистрирован: 2017.03.28, 17:37

Re: Kartik Select2 добавить клиента когда не нашел результата

Сообщение hollanditkzn »

Решена проблема

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

<?= $form->field($client, 'phone')->widget(Select2::className(), [
                    'data' => ArrayHelper::map(Client::find()->all(), 'id', 'phone'),
                    'options' => ['placeholder' => 'Введите номер телефона'],
                    'pluginOptions' => [
                        'allowClear' => true,
                        'language' => [
                            'noResults' => new JsExpression('function () { return "<button type=\"button\" class=\"btn btn-primary btn-xs\">Добавить клиента</button>"; }'),
                        ],
                        'escapeMarkup' => new JsExpression('function (markup) {
        return markup;
    }')
                    ],
            ])?>
Аватара пользователя
Vi_ru_S
Сообщения: 61
Зарегистрирован: 2018.08.14, 07:39
Откуда: Владивосток
Контактная информация:

Re: Kartik Select2 добавить клиента когда не нашел результата

Сообщение Vi_ru_S »

Подскажите как сделал так кода перепределяешь noResults не слетал русский язык?
В действительности все иначе чем на самом деле. Антуан де Сент Экзюпери
Ответить