Saudações amigos!
Recentemente no trabalho eu tive que alterar os formulários de registro e edição de usuário do Drupal para que o campo de e-mail não seja obrigatório.
É meio sem sentido, mas vai por mim, essas coisas são mais comum do que se pensa.
E como realizamos uma proeza dessas? Editamos o user.module para que ele satisfaça a nossa vontade?
ERRADO!
Sempre que hackeamos o core do Drupal, deus mata um gatinho. Para que esta barbárie não aconteça, devemos fazer uso do hook_form_alter. Hooks (ganchos, em inglês) são funções especiais que permitem interagir com o core do Drupal.
O legal é que através deste hook podemos não só alterar os formulários do Drupal, quanto os formulários fornecidos por outros módulos.
A sim, deixe apenas eu deixar claro que este artigo é para a versão 6. Mas adaptar para Drupal 7 é fácil.
Criando um Módulo para o nosso trabalho
Para usar este hook, precisamos criar um módulo simples, que se chamará no email registration. Crie uma pasta dentro de /sites/all/modules ou /sites/default/modules chamada no_email_register. Dentro desta pasta, coloque os seguintes arquivos (ambos são requiridos):
- no_email_register.info: contém das informações do módulo, como nome, descrição versão, etc. Seu conteúdo será este:
-
name = No email registration
-
description = Remove a obrigatoriedade de informar um email no registro do usuário
-
core = 6.x
-
version = 6.x-dev
-
package =
- no_email_register.module: É aqui que vai ficar o código do nosso módulo, vamos começar incluindo:
-
<?php
-
/**
-
* Implementation of hook_form_alter().
-
*/
-
function no_email_register_form_alter(&$form, &$form_state, $form_id) {
-
-
}
Observe que a marcação do PHP não está fechada com "?>" e isso é proposital. Simplesmente deixe assim.
Descobrindo o id do formulário do campo a ser alterado
Antes de continuar, precisamos descobrir os $form_id's dos formulários que terão os campos alterados. Isso é simples de fazer, basta dar uma olhada no código-fonte do formulário em questão e procurar pelo id da tag <form>:

Isso significa que o $form_id do formulário é user-register, né?

ERRADO NOVAMENTE!
Na verdade o $form_id do formulário de registro é user_register e remete à função user_register() que contém os campos escritos pela Form API (ou FAPI para os íntimos).
O outro $form_id que precisamos alterar é o da página de edição de usuário, o "user_profile_form". Vamos completar o código do nosso no_email_register.module com os seguintes testes:
-
<?php
-
/**
-
* Implementation of hook_form_alter().
-
*/
-
function no_email_register_form_alter(&$form, &$form_state, $form_id) {
-
if($form_id == 'user_register'){
-
-
}
-
-
if($form_id == 'user_profile_form'){
-
-
}
-
}
O próximo passo é saber o que vai ser alterado no campo. Você pode procurar pela função e o campo em FAPI em questão no código do módulo user para usar como referência:

No caso, vamos alterar o valor de '#required' no $form['mail'] de TRUE para FALSE. Você pode ver isso no código abaixo, que também é o código completo do nosso IMENSO módulo:
-
<?php
-
-
/**
-
* Implementation of hook_form_alter().
-
*/
-
function no_email_register_form_alter(&$form, &$form_state, $form_id) {
-
if($form_id == 'user_register'){
-
$form['mail']['#required'] = FALSE;
-
$form['account']['mail']['#required'] = FALSE;
-
}
-
-
if($form_id == 'user_profile_form'){
-
$form['account']['mail']['#required'] = FALSE;
-
}
-
-
}
Agora é só ativar o módulo e Voilà!
Nosso artigo de desenvolvimento Drupal chegou ao fim. É muito simples alterar um formulário, e claro que este artigo apenas arranhou o assunto. Mesmo assim é uma informação que salva vidas.
Use sem moderação, e SEMPRE PENSE NOS GATINHOS.
