Здравствуйте!
Необходимо реализовать следующее. Автор добавляет свои статьи. При добавлении он должен иметь возможность указать соавторов. Многие соавторы уже есть в базе данных. Поэтому лучше сделать через автокомплит (как вариант - виджет от Картика typehead, там есть возможность множественного выбора). Но как сделать так, чтобы автор мог сам добавить соавтора, если нужного соавтора не обнаружено? Была мысль использовать unclead/yii2-multiple-input, но там вроде минимальное количество инпутов = 2 (а соавтор может быть один); и в таком случае не соображу как прикрутить к нему typehead. Либо может кто-нибудь подскажет более интересную идею решения задачи?
unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead
Рядом можно сделать кнопку для добавления нового автора. Кнопка вызывает модальное окно, в котором выводится нужная форма.
После успешного добавления - новый автор найдется через автокомплит.
https://github.com/loveorigami/yii2-modal-ajax - использую у себя для форм
После успешного добавления - новый автор найдется через автокомплит.
https://github.com/loveorigami/yii2-modal-ajax - использую у себя для форм
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead
Вы уверены?
Используйте динамически добавляемые поля ввода typehead (это не сложно делается без всяких виджетов), в контроллере получаете массив с фио соавторов, а дальше в зависимости от способа хранения.Но как сделать так, чтобы автор мог сам добавить соавтора, если нужного соавтора не обнаружено? Была мысль использовать unclead/yii2-multiple-input, но там вроде минимальное количество инпутов = 2 (а соавтор может быть один); и в таком случае не соображу как прикрутить к нему typehead. Либо может кто-нибудь подскажет более интересную идею решения задачи?
Re: unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead
Удалось совместить unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead следующим образом:
Работает это следующим образом: если в инпуте не найдено ни одного автора, то вываливается сообщение "Ни одного автора не найдено. Добавить соавтора", где "Добавить соавтора" - ссылка, при клике на которую открывается модальное окно с формой добавления нового автора. После успешного добавления необходимо передать в поле, в котором был клик на "Добавить соавтора", ФИО добавленного соавтора. Вопрос в том, как получить id этого поля. Думаю, было бы логичным передавать, наверное, номер строки (инпута), который и является частью этого айдишника, вместе со ссылкой Url::to('/user/author/coauthorcreate'). Но как в templat'e получить этот номер?
Код: Выделить всё
<?= $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); ?>
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead
В обработчике, там где модалку открываете
Код: Выделить всё
var el = $(this),
target = el.closest('yourtypheadselector');
$('yourmodalselector').attr('data-target', target.attr('id'));
Re: unclead/yii2-multiple-input и kartik-v/yii2-widget-typeahead
Спасибо! Все получилосьyiiliveext писал(а): ↑2019.09.18, 20:50 В обработчике, там где модалку открываетеКод: Выделить всё
var el = $(this), target = el.closest('yourtypheadselector'); $('yourmodalselector').attr('data-target', target.attr('id'));