Pregunta:
Estoy usando drupal_get_form('event_signup_form')
para incrustar mi formulario personalizado dentro de un bloque. El formulario se está procesando según lo previsto, pero el envío del formulario no activa nada.
La función del formulario en sí se llama event_signup_form($form, &$form_state)
y la función de envío se llama event_signup_form_submit($form, &$form_state)
pero no se llama.
Estoy usandohook_block_view para mostrar el formulario:
function event_block_view($delta = '') {
$blocks = array();
if ($delta ...) {
$blocks['content'] = drupal_render(drupal_get_form('event_signup_form'));
}
}
Me las arreglé para que esto funcionara, así es como (stub):
function hook_block_view($delta = '') {
$blocks['content'] = drupal_render(drupal_get_form('event_signup_form'));
}
function event_signup_form() {
// Register form submit handler, same goes for validation handler
$form['#submit'][] = 'event_signup_form_submit';
return $form;
}
function event_signup_form_submit($form, &$form_state) {
// This is now triggered
}
Respuesta:
A partir de Drupal 7, drupal_get_form () devuelve una matriz de renderizado en lugar de una cadena, así que intente usar:
drupal_render(drupal_get_form('event_signup_form'));
para incrustar el formulario en el bloque. Para obtener información, consulte la sección drupal_get_form () devuelve una matriz de representación en lugar de una cadena en el artículo Conversión de módulos 6.x a 7.x
Además, creo que su función event_signup_form($form, &$form_state)
debería ser simplemente event_signup_form()
(sin argumentos).