Здравствуйте, подскажите пожалуйста. Вот у меня есть своя форма. И есть две кнопки. По нажатию на первую кнопку, отправляются начальные данные в базу данных, а по нажатию на вторую, должны взяться из этой базы данных только что добавленный значения, рассчитаться, и обратно вставиться в базу данных.
Собственно первая кнопка работает хорошо, все введенные данные уходят в БД. Но когда происходит нажатие на вторую кнопку, форма пытается отправиться, так как кнопка submit. Как сделать так, что бы эта кнопка не отправляла форму, а просто выполняла функцию? Заранее благодарю.
<?php
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Подтвердить ввод данных'),
'#submit' => array('webformizi_form_submit_one'),
);
$form['submit2'] = array(
'#type' => 'submit',
'#value' => t('Высчитать поверку'),
'#submit' => array('webformizi_form_submit_two'),
);
?>
Комментарии
Так делайте батон, а не сабмит.
Или может вам аякс нужен?
В каком плане он не должен отправлять форму??
Если он не будет отправлять форму - как Вы будете получать данные формы в той же "выполняемой функции"?
Вам нужно просто не в FORMNAME_submit реализовывать логику сохранения в БД, а в коллбеке нужного сабмита.
Ну когда происходит нажатие на вторую кнопку, форм пытаются отправиться, а получать данные формы мне не нужно во второй кнопке. Во второй кнопке мне нужно получить данные из БД, сделать расчёт исходя из полученных данных, и записать в базу данных что посчиталось. И функции разные же, на одной кнопке функция просто записывает в БД, а вторая берёт из БД
Так а какое тогда отношение имеет кнопка к форме??
Ну кнопка к форме отношения не имеет. Просто вот какой тип тогда кнопки создать, что к кнопке добавить, что бы по нажатию на неё выполнить конкретную функцию
Если кнопка к форме отношения не имеет - делать ее в форме не нужно.
Для того чтоб при нажатии на кнопку выполнить функцию - необходимо задать атрибут #submit.
Понятно. А подскажите пожалуйста, как отдельно сделать тогда кнопку? Просто ведь я создаю страницу
<?php
function webformizi_menu() {
$items = array();
$items['newselect'] = array(
'title' => 'Новая поверка',
'page callback' => 'main_funct', //Отрисовка стр.
'type'=> MENU_NORMAL_ITEM,
'access callback' => TRUE,
);
return $items;
}?>
А потом возвращаю форму
<?php
function main_funct() {
$form = drupal_get_form('webformizi_form');
$form = drupal_render($form);
return $form;
}
?>
1. Если на странице нужна только форма - можно указывать коллбеком сразу генератор формы:
<?php
function webformizi_menu() {
$items = array();
$items['newselect'] = array(
'title' => 'Новая поверка',
'page callback' => 'drupal_get_form',
'page arguments' => array('webformizi_main_form'), // Имя функции генератора формы.
'type'=> MENU_NORMAL_ITEM,
'access callback' => TRUE,
);
return $items;
}
?>
2. Названия функциям следует давать более безопасные и понятные, хорошей практикой считается начинать с названия модуля:
<?php
function webformizi_main_form($form, &$form_state) {
// Реализация формы
return $form;
}
?>
3. Если нужно вывести более чем 1 форму на странице, можно выводить ее как часть рендер-массива. Коллбек страницы предназначен для возврата рендер-массива, не нужно в нем рендерить элементы:
<?php
function webformizi_menu() {
$items = array();
$items['newselect'] = array(
// Заголовок правильнее передавать на латинице.
// Вы сможете перевести эту надпись в интерфейсе переводов:
// admin/config/regional/translate/translate
'title' => 'New check',
'page callback' => 'webformizi_main_page',
'type'=> MENU_NORMAL_ITEM,
'access callback' => TRUE,
);
return $items;
}
function webformizi_main_page() {
$output = array();
$output['main_form'] = drupal_get_form('webformizi_main_form');
$output['secondary_form'] = drupal_get_form('webformizi_secondary_form');
return $output; // Возвращайте рендер-массив
}
?>
Разобрался, спасибо большое. Собственно сделал вот так:
Создал кнопку вот так
<?php
function webformizi2_form($form, &$form_state) {
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Высчитать поверку'),
'#submit' => array('webformizi2_form_submit_two'),
);
return $form;
}
?>
А затем добавил в рендер-массив
<?php
function main_funct() {
$output = array();
$output['forma1'] = drupal_get_form('webformizi_form');
$output['forma2'] = drupal_get_form('webformizi2_form');
return $output;
}?>
А тут отрисовал
<?php
function webformizi_menu() {
$items = array();
$items['newselect'] = array(
'title' => 'Новая поверка',
'page callback' => 'main_funct', //Отрисовка стр.
'type'=> MENU_NORMAL_ITEM,
'access callback' => TRUE,
);
return $items;
}
?>
Большое спасибо за помощь
Сделайте независимую кнопку от формы и повесьте на нее коллбек... через js скорее всего. Но, имхо, чего-то "мудрите", т.к. все равно вам нужны значения из формы и вывод... это судя по названиям кнопок.
Ну во второй кнопке значения из формы не нужны, тут просто по нажатию кнопки "Высчитать поверку", берём из БД только что добавленные значения и считаем, а потом обратно записываем результат в БД