E outra coisa que os Drupaleiros brasileiros volta e meia se embolam é em como utilizar aquela tal de "FAPI", ou "Form API", também conhecida como "aquilo que você precisa saber para fazer módulos que customizem os formulários do Drupal".
Atenção: partirei do módulo criado em http://pedrorocha.net/2011/12/como-criar-um-m%C3%B3dulo-para-drupal-6-e-7
Qual meu objetivo com esse módulo: customizar a página de criação do node do tipo Página(page).
Drupal 6
No arquivo meuprimeiromodulo.module, adicionaremos o seguinte trecho de código:
function meuprimeiromodulo_form_page_node_form_alter(&$form, &$form_state) {
// Exemplo de como mudar o título
drupal_set_title("Eu quero mudar o título do formulário");
// Exemplo de como mudar o tamanho do campo body
$form['body_field']['body']['#rows'] = 3;
// Exemplo de como mudar o texto do botão "Salvar"
$form['buttons']['submit']['#value'] = 'E também quero mudar o botão salvar';
// Exemplo de como adicionar uma função específica sua para ser executada ao
// salvar o node
$form['#submit'][] = 'meuprimeiromodulo_meu_submit_especial';
}
function meuprimeiromodulo_meu_submit_especial() {
/* Aqui vai seu código */
}
Drupal 7
No arquivo meuprimeiromodulo.module, adicionaremos o seguinte trecho de código:
function meuprimeiromodulo_form_page_node_form_alter(&$form, &$form_state) {
// Exemplo de como mudar o título
drupal_set_title("Eu quero mudar o título do formulário");
// Exemplo de como mudar o tamanho do campo body
$form['body']['und'][0]['#rows'] = 3;
// Exemplo de como mudar o texto do botão "Salvar"
$form['actions']['submit']['#value'] = 'E também quero mudar o botão salvar';
// Exemplo de como adicionar uma função específica sua para ser executada ao
// salvar o node
$form['#submit'][] = 'meuprimeiromodulo_meu_submit_especial';
}
function meuprimeiromodulo_meu_submit_especial() {
/* Aqui vai seu código */
}
O que aconteceu aqui
Esse funcionamento foi alcançado através do hook_form_FORMID_alter(), que foi implementado com a função meuprimeiromodulo_form_page_node_form_alter. O hook funciona da seguinte forma:
- substitua a parte "hook" pelo nome do seu módulo(no nosso caso: meuprimeiromodulo"
- substitua a parte FORMID pelo valor do campo "form_id" do formulário que você quer alterar(dica: basta ver o código-fonte da página em que o formulário que você quer alterar está, e procurar por "form_id", que rapidamente irá achar), que no nosso caso foi "page_node_form"(page é o tipo de conteúdo, então outros nodes seguem a mesma regra, como cadastro_node_form, por exemplo)
- a variável $form guarda as informações sobre a estrutura do formulário, com um array bem estruturado e completo, aonde você pode alterar tudo antes de ir para a tela
- a variável $form_state guarda os valores com que o formulário foi preenchido(se é um novo node, o formulário virá vazio, então não terá muito valor nesse momento, mas sim em uma validação, etc)
- de resto, os comentários no próprio código já explicam
That's all folks!
obs: sintam-se a vontade para criticar, tirar dúvidas, questionar algo que possa ser feito melhor, etc


