Manejar varios botones de envÃo en la API de formulario de Drupal
Tengo 2 botones de envÃo y quiero realizar diferentes acciones para cada botón de envÃo . Aquà quiero establecer los campos del formulario que solo se pueden hacer en form_alter (). ¿Puede alguien sugerir cómo comprobar si hay varios botones de envÃo en la función form_alter ()?
He utilizado
function myform_form_submit($formID, &$form_state) {
if($form_state['clicked_button']['#value'] == $form_state['values']['submit_one']) //if button 1 is clicked
$form_state['redirect'] = 'mypath/page_one'; //redirect to whatever page you want
else if($form_state['clicked_button']['#value'] == $form_state['values']['submit_two']) /if button 2 is clicked
$form_state['redirect'] = 'mypath/page_two';
}
Pero esto no funciona
3 answers
Lo mejor que puede hacer si tiene dos botones de envÃo en un formulario y desea que hagan cosas diferentes, es crear una función de envÃo diferente para cada botón y conectarlos. Una de las cosas buenas de FormAPI es que automáticamente vincula el formulario con el controlador de envÃo para usted, pero si tiene dos botones de envÃo, desea ir a un lugar nuevo.
Asà que es probable que su código de formulario contenga:
$form['submit_one'] = array(
'#type' => 'submit',
'#value' => t('Submit One'),
'#submit' => array('my_module_form_submit_one'),
);
$form['submit_two'] = array(
'#type' => 'submit',
'#value' => t('Submit Two'),
'#submit' => array('my_module_form_submit_two'),
);
Pero no se lo que quieres decir con form_alter () - no hay razón para usar un alterador de forma de cualquier tipo.
Editar: Como se mencionó en los comentarios: si necesita diferentes funciones de validación para los dos botones, también puede incluir '#validate' => array('my module_form_validate_one')
y '#validate' => array('my module_form_validate_two')
en las matrices de botones respectivas. Pero no es necesario, y si la función de validación de formulario estándar funciona bien, entonces vaya con eso.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-17 19:15:36
Si desea manejar un botón de envÃo diferente, haga clic dentro de una función de envÃo, puede marcar:
if($form_state['values']['op'] == BUTTON_ONE_VALUE){
} else if($form_state['values']['op'] == BUTTON_TWO_VALUE){
}
O puede asignar cierta propiedad al botón primero, luego marque:
$form_state['triggering_element']['#attributes'][YOUR_PROPERTY] == VALUE
Estoy usando Drupal 7... Espero que esto ayude
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-08 05:39:39
, Mientras que el aceptado la respuesta es correcta, cabe señalar que debe pasar valores diferentes con cada uno de sus botones de envÃo, o la función de envÃo será el último botón de enviar definido.
En otras palabras, si el valor de ambos botones submit es 'Submit', entonces solo se llamará a la segunda función submit, independientemente del botón que se presione.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-23 00:17:42