Задать вопрос
@hollanditkzn

Как сделать чтобы давала ссылку когда нет результата в виджете Select2?

У меня такая проблема что читая документацию я не могу понять как сделать, чтобы когда виджет показывает "совпадений не найдено",
<?= $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>"; }'),
                            ],
                    ]
            ])?>
давала ссылку на модальное окно, где можно создать запись. Гуглил мало таких примеров, но некоторые я не пойму что и куда.
Примерно вот мой код, но так ссылка не высвечивается
Я пробовал еще примерно такой пример, потому что не доконца понимаю этот виджет на счет того чтобы изменить надпись на кнопку
Форме
<?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; }'),
                    ]
            ])?>

В контроллере формы
public function actionCreate()
    {
        $model = new Zakaz();
        $client = new Client();
        ...
        }

        return $this->render('create', [
            'model' => $model,
            'client' => $client,
        ]);
    }

И в контроллере 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;
    }

Наверное правильно я понятно написал
  • Вопрос задан
  • 251 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@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;
    }')
                    ],
            ])?>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы