Estoy tratando de modificar algunos de Drupal 6 código de formulario e incorporar algunos nativos de la validación del formulario. Código similar a este, pero la validación no funciona. Yo nunca conseguir incluso en función de thisFormName_form_validate. Cualquier Drupalians tener buenas ideas?

function thisFormName_form_alter(&$form, $form_state, $form_id) {
  $form['email_address'] = array(
    '#type' => 'textfield',
    '#title' => t('Enter your email address (optional)'),
    '#default_value' => $object['email_address'],
    '#weight' => 4,
    '#size' => 60,
    '#maxlength' => 128,  
    '#description' => t('Enter email address.'),
  );


function thisFormName_form_validate($node, &$form) {
  if ($form_state['values']['email_address'] == '') 
  {
    form_set_error('', t('Email must be valid format if entered.'));

  }
}

OriginalEl autor harry_T | 2010-03-04

2 Comentarios

  1. 13

    Puesto que usted está utilizando el formulario de alterar, de manera de no crear el formulario, se debe agregar la validación del controlador de sí mismo:

    function myModule_form_alter(&$form, $form_state, $form_id) {
      $form['email_address'] = array(
        '#type' => 'textfield',
        '#title' => t('Enter your email address (optional)'),
        '#default_value' => $object['email_address'],
        '#weight' => 4,
        '#size' => 60,
        '#maxlength' => 128,  
        '#description' => t('Enter email address.'),
      );
      $form['#validate'][] = 'my_validation_function';
    }
    
    
    function my_validation_function(&$form, &$form_state) {
      if ($form_state['values']['email_address'] == '') {
        form_set_error('', t('Email must be valid format if entered.'));
      }
    }

    Drupal sólo se utiliza por defecto la validación que se define como la form_name + _validate. Este no es el caso puesto que usted está utilizando hook_form_alter.

    +1 – no se dio cuenta que ya había contestado esto – lo siento por redundante de la publicación de similar respuesta.

    OriginalEl autor googletorp

  2. 5

    EDICIÓN: Básicamente la misma respuesta como googletorps. No se dan cuenta de su mientras que la publicación de la mina. Dejando aquí para la explicación alternativa, pero la suya es la correcta y fue el primero (+1).


    Hay algo sospechoso acerca de su función nomenclatura:

    • Como con todo el gancho implementaciones, su hook_form_alter función debe ser nombrado después de que su módulo personalizado, no después de la forma (por ejemplo,yourModule_form_alter), en cuyo caso se activaría para todos formas. Si (como parece) sólo desea enlazar en un formulario específico, el uso de hook_form_FORM_ID_alter, en sustitución de ‘gancho’ con el nombre del módulo, y ‘FORM_ID’ con el id (nombre) de la forma que desea manipular.

    • La función de validación de las devoluciones de llamada para un formulario aparecen como una matriz de nombres de función en $form['#validate']. Es sólo una comodidad de acceso directo para los formularios generados por ti mismo que no tenga explícitamente a añadir que, pero el uso de una función llamada después de la forma, añadiendo un ‘_validate» al final. En su caso, de que la alteración de un formulario que viene de otro módulo, por lo que necesita para añadir la función de validación de forma explícita.

    Así que el código debe ser algo como esto:

    function yourModuleName_theFormID_form_alter(&$form, $form_state, $form_id) {
      $form['email_address'] = array(
        '#type' => 'textfield',
        '#title' => t('Enter your email address (optional)'),
        '#default_value' => $object['email_address'],
        '#weight' => 4,
        '#size' => 60,
        '#maxlength' => 128,  
        '#description' => t('Enter email address.'),
      );
      //Add custom validation callback
      $form['#validate'][] = 'yourModuleName_theFormID_validate';
    
    
    function yourModuleName_theFormID_validate(&$form, &$form_state) {
      if ($form_state['values']['email_address'] == '') {
        form_set_error('', t('Email must be valid format if entered.'));
      }
    }

    OriginalEl autor Henrik Opel

Dejar respuesta

Please enter your comment!
Please enter your name here