Я пишу модуль в котором есть форма, по событию в которую загружаются аналитические данные в виде сокращенной версии, так-как данных много, то загружать их полностью нет смысла, иногда достаточно и краткой версии для общего ознакомления. Но по логике мне нужна вторая кнопка, которая будет позволять загрузить полную версию... так-как это мой первый модуль, я не совсем поняла как можно внедрить в форму вторую кнопку, чтобы она так-же брала часть запрошенных данных из текущей формы но выполняла при этом свой сценарий.
Я так понимаю 2 формы сделать невозможно и одну в другую вложить тоже, куда копать, подскажите пожалуйста кто разбирается в этом...
Комментарии
Можно. Сделайте также как и первую кнопку. В сабмите и валидации проверяйте ту, которую нажали
Добавила в форму 2-ю кнопку
'#id' => 'button',
'#type' => 'submit',
'#value' => $this->t('Анализ данных'),
'#ajax' => [
'callback' => '::setCalcMessage',
],
];
$form['actions']['submit_2'] = [
'#id' => 'button_2',
'#type' => 'submit',
'#value' => $this->t('Загрузить полную версию анализа данных'),
'#ajax' => [
'callback' => '::setCalcMessage_2',
],
];
Но как обработку событий сделать по ним.. мне бы хоть пример какой.. или что почитать
Бывалые друпалеры всегда советуют смотреть примеры прямо в ядре и в тестах. Я тоже такого же мнения придерживаюсь.
Посмотрите как такое сделано в модулях, где есть подобные формы с 2-мя кнопками. Например форма создания ноды: кнопки сохранить и предпросмотр. Кроме этого примера ещё вагон и маленькая тележка подобного...
очень долго копалась в модулях друпал но ничего подобного не нашла, имею ввиду обработка событий кнопок с условием, сделала 2-ю функцию, в которой калбек прописала, работает но как-то я думаю это не правильно. Как можно вот это применить.. не пойму
#submit' => array('submit_button_1_submit')
Примеров валом!!!
И в ядре и в контрибе и в гугле!
https://git.drupalcode.org/project/commerce/-/blob/8.x-2.x/modules/produ...
Лучший кладязь примеров - примеры
Смотрите в сторону стейтов и AJAX API
Сделала таким образом
(
'#id' => 'button',
'#type' => 'submit',
'#value' => $this->t('Анализ данных'),
'#ajax' => [
'callback' => '::setCalcMessage',
],
'#submit' => array('submit_button_1_submit'),
);
$form['actions']['submit_2'] = array
(
'#id' => 'button_2',
'#type' => 'submit',
'#value' => $this->t('Полная версия'),
'#ajax' => [
'callback' => '::setCalcMessage_2',
],
'#submit' => array('submit_button_2_submit'),
);
Но теперь задача как 2-ю кнопку сделать скрытой и отображать, только после того, как сработает клик первой кнопки? Какие могут быть методы в таком случае?
1. Можно обойтись 1 сабмитом...
2. Что должно происходить после нажатия на 1 кнопку?
Первая кнопка после заполнения формы загружает анализ данных в html-формате на страницу, 2-я кнопка нужна, чтобы догрузить больше данных, ну и там запросы в базу данных добавятся, это все из обработки одной формы происходит
Вот ипроверяйте - если ваш анализ доступен - покажите 2-ую кнопку
Возможно вам нужна "многошаговая форма".
Прям так и гуглится или "drupal multistep form".
upd: спасибо, поправил.
только D9
нет, она мне ненужна по логике, но я подумаю еще над этим, благодарю за совет!