Salve meus amigos!
Dando continuação à série de artigos de como criar um módulo do Drupal. Já tivemos duas partes. Depois de uma semana de atraso, eis que finalmente chega a terceira e penultima parte da série de tutoriais de como criar um módulo totalmente inútil do Drupal.
Vamos agora revisar as interfaces e links que deverão ser criados:
Hoje, vamos criar a página de administração e fazer uma pequena validação.
A página de administração será criada dentro de uma função, que eu chamei de donatepagseguro_admin(). A página de administração é um formulário, onde é possível entrar algumas informações que serão utilizadas na configuração do formulário do botão de doação do PagSeguro.
Este formulário será montado utilizando a Form API do Drupal. Inicialmente pode parecer confuso, mas na verdade é relativamente simples. Para maior compreensão, eu sugiro fortemente a lida do Forms API Quickstart Guide.
Vamos dar uma olhada na página completa, renderizada:
Como podem ver, é um formulário muito simples, que conta com:
Ok, agora vamos começar a montar nosso formulário, começando pelos fieldsets:
function donatepagseguro_admin() {
// configuração inicial do módulo
$form['config_inicial'] = array(
'#type' => 'fieldset',
'#title' => t('Configuração Inicial'),
'#collapsible' => TRUE,
'#collapsed' => FALSE
);
// selecionando o tipo de botao para pagamento PagSeguro
$form['botoes'] = array(
'#type' => 'fieldset',
'#title' => t('Botões do PagSeguro'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#description' => t('Selecione o botão que deseja utilizar no seu bloco de doações.'),
);
}
Ok, observe que cada item do menu é um item do array $form. Agora vamos esquecer por enquano o item $form['botoes'] (que é o fieldset que agrupa os radioboxes), e nos concentrar no fieldset $form['config_inicial']. Vamos adicionar o campo "email" dentro deste fieldset:
function donatepagseguro_admin() {
// configuração inicial do módulo
$form['config_inicial'] = array(
'#type' => 'fieldset',
'#title' => t('Configuração Inicial'),
'#collapsible' => TRUE,
'#collapsed' => FALSE
);
$form['config_inicial']['donatepagseguro_email'] = array(
'#type' => 'textfield',
'#title' => t('Email cadastrado'),
'#default_value' => variable_get('donatepagseguro_email',''),
'#size' => 60,
'#maxlength' => 60,
'#description' => t("Informe o email cadastrado no PagSeguro"),
'#required' => TRUE,
);
}
O nome do field inserido é "donatepagseguro_email", e está anexado ao textfield 'config_inicial' ($form['config_inicial']['donatepagseguro_email']). E caras, não vou explicar linha por linha, porque, acredito eu, está auto-explicativo. Além disso o Forms API Quickstart Guide explica bem direitinho isso, apesar de estar tudo em inglês. Algum dia eu prometo traduzir a página.
A única coisa que merece atenção no momento é a função variable_get.
É o seguinte, neste tipo de formulário especificamente, e mais tarde eu vou explicar porquê, cada elemento do formulário (textfield, textarea, checkbox, etc) cria uma variável que é armazenada no sistema, como mesmo nome do campo. O valor desta variável pode ser acessada através da função variable_get(). Você precisa passar para esta função dois valores:
Bom, inicialmente é isso que precisa-se saber sobre variable_get. Continuando, vamos criar agora uma textarea, que será utilizada para inserir um pequeno texto de ajuda, que precederá o botão do PagSeguro:
function donatepagseguro_admin() {
// configuração inicial do módulo
$form['config_inicial'] = array(
'#type' => 'fieldset',
'#title' => t('Configuração Inicial'),
'#collapsible' => TRUE,
'#collapsed' => FALSE
);
$form['config_inicial']['donatepagseguro_email'] = array(
'#type' => 'textfield',
'#title' => t('Email cadastrado'),
'#default_value' => variable_get('donatepagseguro_email',''),
'#size' => 60,
'#maxlength' => 60,
'#description' => t("Informe o email cadastrado no PagSeguro"),
'#required' => TRUE,
);
$form['config_inicial']['donatepagseguro_ajuda'] = array(
'#type' => 'textarea',
'#title' => t('Texto de ajuda'),
'#default_value' => variable_get('donatepagseguro_ajuda', ''),
'#cols' => 60,
'#rows' => 5,
'#description' => t('Informe um pequeno texto que irá preceder o botão de doações.'),
);
}
Observe que isso apenas gera uma textarea simples, sem filtro de entrada. Vamos agora inserir o filtro de entrada:
function donatepagseguro_admin() {
// configuração inicial do módulo
$form['config_inicial'] = array(
'#type' => 'fieldset',
'#title' => t('Configuração Inicial'),
'#collapsible' => TRUE,
'#collapsed' => FALSE
);
$form['config_inicial']['donatepagseguro_email'] = array(
'#type' => 'textfield',
'#title' => t('Email cadastrado'),
'#default_value' => variable_get('donatepagseguro_email',''),
'#size' => 60,
'#maxlength' => 60,
'#description' => t("Informe o email cadastrado no PagSeguro"),
'#required' => TRUE,
);
$form['config_inicial']['donatepagseguro_ajuda'] = array(
'#type' => 'textarea',
'#title' => t('Texto de ajuda'),
'#default_value' => variable_get('donatepagseguro_ajuda', ''),
'#cols' => 60,
'#rows' => 5,
'#description' => t('Informe um pequeno texto que irá preceder o botão de doações.'),
);
if (!isset($edit['format'])) {
$edit['format'] = FILTER_FORMAT_DEFAULT;
}
$form['config_inicial']['format'] = filter_form($edit['format']);
}
Ok, os campos deste fieldset foram todos construídos. Agora vamos nos concentrar apenas no fieldset "botoes" ($form['botoes']), que possui um conjunto de radioboxes. Naturalmente não é necessário criar cada item "<input type="radio" />" separadamente. Faremos assim:
function donatepagseguro_admin() {
$form['botoes'] = array(
'#type' => 'fieldset',
'#title' => t('Botões do PagSeguro'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#description' => t('Selecione o botão que deseja utilizar no seu bloco de doações.'),
);
$form['botoes']['donatepagseguro_btns'] = array(
'#type' => 'radios',
'#title' => t('Tipo de botão'),
'#required' => TRUE,
'#default_value' => variable_get('donatepagseguro_btns', 0),
'#options' => array(t('<img src="https://pagseguro.uol.com.br/Imagens/btndoacao.jpg" alt="opção 1" />'), t('<img src="https://pagseguro.uol.com.br/Imagens/btndoar.jpg" alt="opção 2" />'), t('<img src="https://pagseguro.uol.com.br/Imagens/btncontribuicao.jpg" alt="opção 3" />'), t('<img src="https://pagseguro.uol.com.br/Imagens/FacaSuaDoacao.gif" alt="opção 4" />'), t('Botão próprio')),
);
}
Duas observações: primeiro, observe o valor padrão dos radioboxes (definido como valor do #default_value). Eu utilizei o variable_get para recuperar o valor selecionado pelo usuário para o botão. Mas caso não exista esta variável "donatepagseguro_btns" (e ela não vai existir antes do usuário apertar "salvar" pela primeira vez), ele vai utilizar como padrão o 0, ou seja vai selecionar o primeiro item dos radios.
A segunda observação é mais importante. Cada radio é definido como o valor de #options, como um item de um array. Abaixo, vou tenta deixar mais organizado para melhor visualização:
'#options' => array(
t('<img src="https://pagseguro.uol.com.br/Imagens/btndoacao.jpg" alt="opção 1" />'),
t('<img src="https://pagseguro.uol.com.br/Imagens/btndoar.jpg" alt="opção 2" />'),
t('<img src="https://pagseguro.uol.com.br/Imagens/btncontribuicao.jpg" alt="opção 3" />'),
t('<img src="https://pagseguro.uol.com.br/Imagens/FacaSuaDoacao.gif" alt="opção 4" />'),
t('Botão próprio')
),
Nosso formulário de configuração está quase pronto. Observe que nas opções de radio, a última me permite especificar um link para uma imagem que será utilizada como um botão. Então, vamos criar mais um item no nosso formulário, para que o usuário possa utilizá-lo para informar o link.
function donatepagseguro_admin() {
$form['botoes'] = array(
'#type' => 'fieldset',
'#title' => t('Botões do PagSeguro'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#description' => t('Selecione o botão que deseja utilizar no seu bloco de doações.'),
);
$form['botoes']['donatepagseguro_btns'] = array(
'#type' => 'radios',
'#title' => t('Tipo de botão'),
'#required' => TRUE,
'#default_value' => variable_get('donatepagseguro_btns', 0),
'#options' => array(t('<img src="https://pagseguro.uol.com.br/Imagens/btndoacao.jpg" alt="opção 1" />'), t('<img src="https://pagseguro.uol.com.br/Imagens/btndoar.jpg" alt="opção 2" />'), t('<img src="https://pagseguro.uol.com.br/Imagens/btncontribuicao.jpg" alt="opção 3" />'), t('<img src="https://pagseguro.uol.com.br/Imagens/FacaSuaDoacao.gif" alt="opção 4" />'), t('Botão próprio')),
);
$form['botoes']['donatepagseguro_linkbotao'] = array(
'#type' => 'textfield',
'#title' => t('Link para a imagem do botão'),
'#default_value' => variable_get('donatepagseguro_linkbotao',''),
'#size' => 100,
'#description' => t("Informe o endereço completo para a imagem que deseja utilizar como botão de doação"),
'#required' => FALSE,
);
}
Sempre existe a possibilidade do usuário selecionar a opção de usar um botão personalizado, mas não informar um link. Mas para isso, vamos fazer uma pequena validação neste formulário para evitar este tipo de contra-tempo.
Bom, a nossa página de administração está quase completa, mas falta um item imprescindível, para informar ao Drupal que este formulário é um formulário de sistema, e que para cada item de formulário deve ser gerada uma variável com o valor do mesmo. Isso será feito retornando a variável $form dentro da função system_settings_form. Abaixo eu vou colocar o código completo da função donatepagseguro_admin(), com a adição do system_settings_form:
function donatepagseguro_admin() {
// configuração inicial do módulo
$form['config_inicial'] = array(
'#type' => 'fieldset',
'#title' => t('Configuração Inicial'),
'#collapsible' => TRUE,
'#collapsed' => FALSE
);
$form['config_inicial']['donatepagseguro_email'] = array(
'#type' => 'textfield',
'#title' => t('Email cadastrado'),
'#default_value' => variable_get('donatepagseguro_email',''),
'#size' => 60,
'#maxlength' => 60,
'#description' => t("Informe o email cadastrado no PagSeguro"),
'#required' => TRUE,
);
$form['config_inicial']['donatepagseguro_ajuda'] = array(
'#type' => 'textarea',
'#title' => t('Texto de ajuda'),
'#default_value' => variable_get('donatepagseguro_ajuda', ''),
'#cols' => 60,
'#rows' => 5,
'#description' => t('Informe um pequeno texto que irá preceder o botão de doações.'),
);
if (!isset($edit['format'])) {
$edit['format'] = FILTER_FORMAT_DEFAULT;
}
$form['config_inicial']['format'] = filter_form($edit['format']);
// selecionando o tipo de botao para pagamento PagSeguro
$form['botoes'] = array(
'#type' => 'fieldset',
'#title' => t('Botões do PagSeguro'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#description' => t('Selecione o botão que deseja utilizar no seu bloco de doações.'),
);
$form['botoes']['donatepagseguro_btns'] = array(
'#type' => 'radios',
'#title' => t('Tipo de botão'),
'#required' => TRUE,
'#default_value' => variable_get('donatepagseguro_btns', 0),
'#options' => array(t('<img src="https://pagseguro.uol.com.br/Imagens/btndoacao.jpg" alt="opção 1" />'), t('<img src="https://pagseguro.uol.com.br/Imagens/btndoar.jpg" alt="opção 2" />'), t('<img src="https://pagseguro.uol.com.br/Imagens/btncontribuicao.jpg" alt="opção 3" />'), t('<img src="https://pagseguro.uol.com.br/Imagens/FacaSuaDoacao.gif" alt="opção 4" />'), t('Botão próprio')),
);
$form['botoes']['donatepagseguro_linkbotao'] = array(
'#type' => 'textfield',
'#title' => t('Link para a imagem do botão'),
'#default_value' => variable_get('donatepagseguro_linkbotao',''),
'#size' => 100,
'#description' => t("Informe o endereço completo para a imagem que deseja utilizar como botão de doação"),
'#required' => FALSE,
);
return system_settings_form($form);
}
Observe que eu não criei nenhum botão de envio de formulário. Isso não é necessário quando o formulário é um "System Settings Form". Neste caso, os botões "Salvar configurações / Restaurar configurações padrão" são gerados automaticamente.
Agora, vamos validar o formulário acima. Será uma validação Server-side, e ela vai verificar, basicamente:
Isso será feito, naturalmente, utilizando um hook, o hook _validate. o nome da função será o nome da função que será validada, acrescida de "_validate":
function donatepagseguro_admin_validate($form, &$form_state) {
}
Vamos verificar se o campo donatepagseguro_email é vazio ou não:
function donatepagseguro_admin_validate($form, &$form_state) {
if($form_state['values']['donatepagseguro_email'] == '') {
form_set_error('donatepagseguro_email', t('Você precisa informar o seu email cadastrado no PagSeguro.'));
};
}
A função form_set_error vai marcar o campo "donatepagseguro_email" e vai exibir uma mensagem "Você precisa informar o seu email cadastrado".
Por fim, vamos validar o link do botão personalizado.
function donatepagseguro_admin_validate($form, &$form_state) {
if($form_state['values']['donatepagseguro_email'] == '') {
form_set_error('donatepagseguro_email', t('Você precisa informar o seu email cadastrado no PagSeguro.'));
};
$tipobtn = $form_state['values']['donatepagseguro_btns'];
$linkbtn = $form_state['values']['donatepagseguro_linkbotao'];
if (($tipobtn == 4) and ($linkbtn == '')) {
form_set_error('donatepagseguro_linkbotao', t('É Necessário que você informe o endereço da imagem que será utilizada como botão.'));
};
}
Eu armazenei os valores dos campos "donatepagseguro_btns" e "donatepagseguro_linkbotao" nas variáveis $tipobtn e $linkbtn, respectivamente, para facilitar a comparação.
O que eu fiz é simples, eu testei se $tipobtn é igual a 4 (já que a opção "Botão próprio" é o quinto rádio - lembre-se que o primeiro item de um array fica na posição zero) e se $linkbtn é igual a vazio. Se atender estas expectativas, o sistema, através da função form_set_error, irá marcar o campo donatepagseguro_linkbotao e exibir uma mensagem de erro.
Bom gente, é isso.
Semana que vem terminaremos o nosso módulo, criando os blocos e também criando o item do menu que irá apontar para a página de administração.
Até lá!
copyright © Marcus VBP, Todos os direitos reservados
Permitida a cópia desde que citado a fonte. [Política de Privacidade]
Powered by Drupal CMS.
1. fabio*
esse artigo tem 4° parte
2. Carolina*
Bom Dia Marcus, tudo bem?
Estava navegando an internet e descobri que você já realizou alguns estudos sobre "como ganhar dinheiro com blogs", correto?
Sou estudante de jornalismo e estou fazendo uma matéria sobre o assunto. Gostaria de entrevistá-lo.
Se estiver disposto entre em contato comigo pelo email carolinacagno@hotmail.com?
Obrigada.
3. b&b venice*
Olá!
Algum tempo atrás eu ainda blog, apesar de eu não ter comentado. Eu estou aprendendo a usar o Drupal (para um pouco!). Eu peço uma coisa, não relacionado a este artigo ...
Eu quero ganhar dinheiro com meu blog, mas estou tendo problemas. Para mim, é pela colocação de anúncios, que são os melhores lugares para colocar os anúncios do Google?
Obrigado!
Enviar novo comentário