forms – Problema con el mensaje de error del formulario de inicio de sesión del usuario

Pregunta:

Estoy agregando el formulario de inicio de sesión de usuario a la página de inicio de mi sitio y, al imprimirlo en mi page.tpl.php, la validación se pierde un poco. La primera vez que ingreso un nombre de usuario o contraseña incorrectos, no pasa nada, pero la segunda vez todo actúa como debería. Estoy confundido acerca de por qué no se muestra la primera vez.

En mi page.tpl.php

print drupal_render(drupal_get_form('user_login_block'));

En mi template.php

if ($form_id == "user_login_block") {
  $form['links']['#markup'] = ' <a class="user-password" href="/user/password">' . t('Forgot username or password?') . '</a>'; 
  $form['name']['#title'] = t('Username'); // Change text on form
  $form['name']['#attributes'] = array('placeholder' => t('Username'));
  $form['pass']['#title'] = t('Password');
  $form['pass']['#attributes'] = array('placeholder' => t('Password'));
  $form['actions']['submit']['#value'] = t('');
}

Mi módulo de validación personalizado

function hook_form_alter(&$form, &$form_state, $form_id){
  if($form_id == 'user_login_block'){
    $form['#validate'][] = '_custom_validation';
  }
}

function _custom_validation(&$form, &$form_state){
  $query = db_select('users', 'u');
  $query->fields('u', array('name'));
  $query->condition('u.name', $form_state['values']['name'], '=');
  $result = $query->execute();
  $name = $result->fetchField();
  if(empty($name)){
    form_set_error('user_name', t('Username or password could not could not be found.'));
  }
}

También tengo el módulo "Registro de correo electrónico" instalado, no estoy seguro de si esto también tiene algo que ver.

¿Alguien sabría algo sobre esto?

Respuesta:

¿Cuál es la razón por la que agrega el formulario de esa manera y tiene una validación personalizada, etc., cuando drupal ya le brinda esto?

Por ejemplo, ¿por qué no usar el sistema de bloques de drupal o el módulo de contexto para colocar el bloque de inicio de sesión en su página de inicio dentro de una de las regiones?

Otra cosa es que su módulo personalizado no debería tener

function hook_form_alter(&$form, &$form_state, $form_id)

debería ser

function MODULE_NAME_form_alter(&$form, &$form_state, $form_id)

Donde reemplaza MODULE_NAME con el nombre de su módulo.
Aunque quizás solo lo tuviste así para este post.

Además, independientemente del método que utilice para mostrar el formulario user_login_block, ya tiene sus propias funciones de validación que vienen con él. Ya tiene estas tres funciones de validación:
http://api.drupal.org/api/drupal/modules!user!user.module/function/user_login_name_validate/7
http://api.drupal.org/api/drupal/modules!user!user.module/function/user_login_authenticate_validate/7
http://api.drupal.org/api/drupal/modules!user!user.module/function/user_login_final_validate/7

Con el último de ellos haciendo (entre otras cosas) esencialmente la misma validación que su función personalizada está tratando de hacer.

Aún puede usar el formulario alter para agregar sus atributos y cambiar títulos, etc. En este caso, el peso del módulo no importa. Solo importa si dos módulos están usando hook_form_alter () y están cambiando las mismas partes del formulario.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım