unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead

Сообщение yura1976 »

Здравствуйте!
Необходимо реализовать следующее. Автор добавляет свои статьи. При добавлении он должен иметь возможность указать соавторов. Многие соавторы уже есть в базе данных. Поэтому лучше сделать через автокомплит (как вариант - виджет от Картика typehead, там есть возможность множественного выбора). Но как сделать так, чтобы автор мог сам добавить соавтора, если нужного соавтора не обнаружено? Была мысль использовать unclead/yii2-multiple-input, но там вроде минимальное количество инпутов = 2 (а соавтор может быть один); и в таком случае не соображу как прикрутить к нему typehead. Либо может кто-нибудь подскажет более интересную идею решения задачи?
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead

Сообщение Loveorigami »

Рядом можно сделать кнопку для добавления нового автора. Кнопка вызывает модальное окно, в котором выводится нужная форма.
После успешного добавления - новый автор найдется через автокомплит.

https://github.com/loveorigami/yii2-modal-ajax - использую у себя для форм
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead

Сообщение yiiliveext »

yura1976 писал(а): 2019.09.08, 22:17 там есть возможность множественного выбора
Вы уверены?
Но как сделать так, чтобы автор мог сам добавить соавтора, если нужного соавтора не обнаружено? Была мысль использовать unclead/yii2-multiple-input, но там вроде минимальное количество инпутов = 2 (а соавтор может быть один); и в таком случае не соображу как прикрутить к нему typehead. Либо может кто-нибудь подскажет более интересную идею решения задачи?
Используйте динамически добавляемые поля ввода typehead (это не сложно делается без всяких виджетов), в контроллере получаете массив с фио соавторов, а дальше в зависимости от способа хранения.
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Re: unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead

Сообщение yura1976 »

Удалось совместить unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead следующим образом:

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

    <?= $form->field($model, 'coauthors')->widget(MultipleInput::class, [
        'min' => 1,
        'max' => 5,
        'allowEmptyList' => false,
        'columns' => [
            [
                'name' => 'coauthors',
                'title' => Module::t('module','COAUTHORS'),
                'type' => Typeahead::className(),
                'options' => [
                    'pluginOptions' => ['highlight' => true],
                    'dataset' => [
                        [
                            'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('value')",
                            'display' => 'value',
                            'remote' => [
                                'url' => Url::to(['/user/author/authorslist']) . '?q=%QUERY',
                                'wildcard' => '%QUERY'
                            ],
                            'templates' => [
                                'notFound' => '<div class="text-danger" style="padding:0 8px">'.Module::t('module','AUTHORS_NOTFOUND').' '.Html::a(Module::t('module','ADD_AUTHOR'),['#'],['id'=>'modalauthor','data-url'=>Url::to('/user/author/coauthorcreate')]).'</div>',
                            ]
                        ]
                    ],
                ],
            ],
        ],
    ])->label(false); ?>
    
Работает это следующим образом: если в инпуте не найдено ни одного автора, то вываливается сообщение "Ни одного автора не найдено. Добавить соавтора", где "Добавить соавтора" - ссылка, при клике на которую открывается модальное окно с формой добавления нового автора. После успешного добавления необходимо передать в поле, в котором был клик на "Добавить соавтора", ФИО добавленного соавтора. Вопрос в том, как получить id этого поля. Думаю, было бы логичным передавать, наверное, номер строки (инпута), который и является частью этого айдишника, вместе со ссылкой Url::to('/user/author/coauthorcreate'). Но как в templat'e получить этот номер?
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead

Сообщение yiiliveext »

В обработчике, там где модалку открываете

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

var el = $(this),
     target = el.closest('yourtypheadselector');
     $('yourmodalselector').attr('data-target', target.attr('id'));
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Re: unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead

Сообщение yura1976 »

yiiliveext писал(а): 2019.09.18, 20:50 В обработчике, там где модалку открываете

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

var el = $(this),
     target = el.closest('yourtypheadselector');
     $('yourmodalselector').attr('data-target', target.attr('id'));
Спасибо! Все получилось
Ответить