Saudações, meus amigos!
Desculpem a demora para retornar a série de tutoriais, que deveria ser semanal, mas sabem como é, imprevistos acontecem... De qualquer forma, aqui eu estou para terminar este tutorial.
Vamos agora revisar as interfaces e links que deverão ser criados:
Para finalizar, vamos criar o link do menu para a página de administração, e também a cereja do bolo, que é a criação do bloco (afinal, este módulo inútil só serve para isso).
A esta altura do campeonato, vocês já devem ter percebido que o Drupal gosta muito de Arrays. De fato, praticamente tudo no módulo ou é um hook (uma função pré-definida) ou um Array.
Para criar o item do menu não será diferente. Veja o código abaixo:
function donatepagseguro_menu() {
$items = array();
$items['admin/settings/donatepagseguro'] = array( // o endereço da página
'title' => 'Donate PagSeguro', // O texto do link
'description' => 'Configure sua conta PagSeguro e selecione o tipo de botao que sera utilizado no bloco de doacoes PagSeguro', // um texto de explicação que será exibido quando o mouse repousar alguns segundos sobre o link (ou seja, o valor do atributo "title" da tag <a>)
'page callback' => 'drupal_get_form', // como ele irá recuperar a informação para construir a página, ou seja, ele vai pegar o formulário ("get_form")
'page arguments' => array('donatepagseguro_admin'), // o nome da função que contém a página de administração
'access arguments' => array('Administrar Donate PagSeguro'), // Qual a permissão que deverá estar marcada para o usuário acessar a página
'type' => MENU_NORMAL_ITEM, // qual o tipo de link (no caso, é um item normal de menu)
);
return $items;
}
Lembrando que o parâmetro type, se não for especificado, o sistema adotará como valor padrão MENU_NORMAL_ITEM.
Bem simples né? Nem tem muito o que explicar.
Agora, para completar o módulo, vamos criar o bloco onde será exibido nosso botão de doação do PagSeguro.
A primeira coisa que precisamos saber sobre como criar um bloco, é que ele pode ser exibido de várias formas e em cantos diferentes. Mas nosso bloco aparece numa lista, na página de administração (/admin/build/blocks), e aparece como um bloco convencional, onde eu quiser.
A informação que será exibida em cada visualização é recuperada através do valor do parâmetro $op. Os valores possíveis para este parâmetro são:
O início do nosso bloco fica assim:
function donatepagseguro_block($op = 'list', $delta = 0, $edit = array()) {
// list the blocks
switch ($op) {
case 'list':
$block[0] = array(
'info' => t('Faca uma doacao via PagSeguro'),
);
return $block;
case 'view':
// conteudo do bloco
return $block;
}
} // end donatepagseguro_block
Com isso, criamos o básico do módulo. Testamos o valor de $op, Se ele for igual a list, vai retornar um Array (óbvio), com um único parâmetro, info, que é o textinho que identifica o bloco na página /admin/build/blocks.
Se o valor de $op for igual a view, ele vai exibir o conteúdo do bloco, que é um formulário. Vou descrever o formulário abaixo, em HTML simples, e onde é variável (cuja definição de valores é feita pela administração do módulo) eu vou deixar em evidência:
<div class="info">{donatepagseguro_ajuda}</div>
<form action="https://pagseguro.uol.com.br/security/webpagamentos/webdoacao.aspx" method="post">
<fieldset>
<input type="hidden" name="email_cobranca" value="{donatepagseguro_email}" />
<input type="hidden" name="moeda" value="BRL" />
<input type="image" src="{donatepagseguro_btns}" name="submit" alt="Faça uma doação com PagSeguro" />
</fieldset>
</form>
Como vamos recuperar o valor destas variáveis? Simples, usando a função variable_get(). Esta função recupera o valor de uma variável, e fornece um valor alternativo, caso a variável não tenha sido criada.
Vamos começar implementando o texto de ajuda, que será exibido antes do botão:
function donatepagseguro_block($op = 'list', $delta = 0, $edit = array()) {
// list the blocks
switch ($op) {
case 'list':
$block[0] = array(
'info' => t('Faca uma doacao via PagSeguro'),
);
$block[1] = array(
'info' => t('Faca uma doacao via PagSeguro - usuario'),
);
return $block;
case 'view':
// conteudo do bloco
switch ($delta) {
case 0:
// se existir texto de ajuda, coloque-o no conteúdo do bloco
if(variable_get('donatepagseguro_ajuda', '') != '') {
$block_content = '<div class="info">' . variable_get('donatepagseguro_ajuda', '') . '</div>';
};
break;
}
return $block;
}
} // end donatepagseguro_block
Agora, vamos testar o valor da variável donatepagseguro_btns, que pode ter vários valores:
function donatepagseguro_block($op = 'list', $delta = 0, $edit = array()) {
// list the blocks
switch ($op) {
case 'list':
$block[0] = array(
'info' => t('Faca uma doacao via PagSeguro'),
);
$block[1] = array(
'info' => t('Faca uma doacao via PagSeguro - usuario'),
);
return $block;
case 'view':
// conteudo do bloco
switch ($delta) {
case 0:
// se existir texto de ajuda, coloque-o no conteúdo do bloco
if(variable_get('donatepagseguro_ajuda', '') != '') {
$block_content = '<div class="info">' . variable_get('donatepagseguro_ajuda', '') . '</div>';
};
// utiliza o botão selecionado pelo usuário
switch (variable_get('donatepagseguro_btns',0)) {
case 0:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoacao.jpg" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 1:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoar.jpg" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 2:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/btncontribuicao.jpg" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 3:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/FacaSuaDoacao.gif" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 4:
$donatepagseguro_btn = '<input type="image" src="'. variable_get('donatepagseguro_linkbotao','https://pagseguro.uol.com.br/Imagens/btndoacao.jpg') .'" name="submit" alt="Faça uma doação com PagSeguro" />';
}
break;
}
return $block;
}
} // end donatepagseguro_block
Vamos definir o resto do formulário:
function donatepagseguro_block($op = 'list', $delta = 0, $edit = array()) {
// list the blocks
switch ($op) {
case 'list':
$block[0] = array(
'info' => t('Faca uma doacao via PagSeguro'),
);
$block[1] = array(
'info' => t('Faca uma doacao via PagSeguro - usuario'),
);
return $block;
case 'view':
// conteudo do bloco
switch ($delta) {
case 0:
// se existir texto de ajuda, coloque-o no conteúdo do bloco
if(variable_get('donatepagseguro_ajuda', '') != '') {
$block_content = '<div class="info">' . variable_get('donatepagseguro_ajuda', '') . '</div>';
};
// utiliza o botão selecionado pelo usuário
switch (variable_get('donatepagseguro_btns',0)) {
case 0:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoacao.jpg" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 1:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoar.jpg" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 2:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/btncontribuicao.jpg" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 3:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/FacaSuaDoacao.gif" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 4:
$donatepagseguro_btn = '<input type="image" src="'. variable_get('donatepagseguro_linkbotao','https://pagseguro.uol.com.br/Imagens/btndoacao.jpg') .'" name="submit" alt="Faça uma doação com PagSeguro" />';
}
$block_content .='
<form action="https://pagseguro.uol.com.br/security/webpagamentos/webdoacao.aspx" method="post">
<fieldset>
<input type="hidden" name="email_cobranca" value="'. variable_get('donatepagseguro_email','') .'" />
<input type="hidden" name="moeda" value="BRL" />
'. $donatepagseguro_btn .'
</fieldset>
</form>
';
break;
}
return $block;
}
} // end donatepagseguro_block
Por fim, vamos definir o bloco:
function donatepagseguro_block($op = 'list', $delta = 0, $edit = array()) {
// list the blocks
switch ($op) {
case 'list':
$block[0] = array(
'info' => t('Faca uma doacao via PagSeguro'),
);
$block[1] = array(
'info' => t('Faca uma doacao via PagSeguro - usuario'),
);
return $block;
case 'view':
// conteudo do bloco
switch ($delta) {
case 0:
// se existir texto de ajuda, coloque-o no conteúdo do bloco
if(variable_get('donatepagseguro_ajuda', '') != '') {
$block_content = '<div class="info">' . variable_get('donatepagseguro_ajuda', '') . '</div>';
};
// utiliza o botão selecionado pelo usuário
switch (variable_get('donatepagseguro_btns',0)) {
case 0:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoacao.jpg" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 1:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoar.jpg" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 2:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/btncontribuicao.jpg" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 3:
$donatepagseguro_btn = '<input type="image" src="https://pagseguro.uol.com.br/Imagens/FacaSuaDoacao.gif" name="submit" alt="Faça uma doação com PagSeguro" />';
break;
case 4:
$donatepagseguro_btn = '<input type="image" src="'. variable_get('donatepagseguro_linkbotao','https://pagseguro.uol.com.br/Imagens/btndoacao.jpg') .'" name="submit" alt="Faça uma doação com PagSeguro" />';
}
$block_content .='
<form action="https://pagseguro.uol.com.br/security/webpagamentos/webdoacao.aspx" method="post">
<fieldset>
<input type="hidden" name="email_cobranca" value="'. variable_get('donatepagseguro_email','') .'" />
<input type="hidden" name="moeda" value="BRL" />
'. $donatepagseguro_btn .'
</fieldset>
</form>
';
// set up the block
$block = array(
'subject' => 'Faça uma doação',
'content' => $block_content,
);
break;
}
return $block;
}
} // end donatepagseguro_block
Pronto, nosso bloco está funcional, e sendo exibido na página:

Bom galera, chegamos ao fim da série de tutoriais de com o criar um módulo do Drupal. Eu disse aqui várias vezes que o resultado final do módulo é inútil, mas de certa forma eu estava sendo incorreto. O módulo serviu para que eu tivesse um primeiro contato com esta área do Drupal, que antes para mim era quase um mistério completo. Espero que os tutoriais também sirvam para introduzi-los no ambiente de desenvolvimento proporcionado pelo Drupal.
No mais, gostaria de dizer que em breve irei iniciar uma outra série de desenvolvimento de módulo, desta vez de algo útil, e que me fez conhecer mais aspectos da criação de módulos.
Criar este módulo abriu minha cabeça para várias possibilidades, inclusive estou com planos para desenvolver mais módulos, coisas simples que por ter um público mais restrito (como por exemplo, programas de afiliados brasileiros, que só interessam aos brasileiros) não possuem um módulo, e a configuração precisa ser feita de uma maneira mais capenga.
Eu criei um módulo que integra o Hotwords ao site, apenas em Node Types selecionados na administração, e também possui uma configuração por usuário, o que é muito útil para blogs ou sites multi-usuário que desejam dar a chance para alguns usuários, os que possuem permissão, de ganhar algo com o conteúdo produzido por eles.
Eu pretendo em breve destrinchar a criação deste módulo, pois ele aborda tópicos que não foram abordados aqui. Talvez o próximo tutorial vá demorar um pouco, pois estou com a agenda um pouco cheia, e estou com planos de alterar meu layout e também adequar mais o blog para receber tutoriais, então provavelmente irei passar algumas semanas sem dar notícia.
Então, até breve (eu espero) e aguardem boas novidades!!
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á!
Salve meus amigos!
Conforme prometido, lanço hoje a segunda parte do tutorial de desenvolvimento de um módulo do Drupal. Na primeira parte, apresentei a funcionalidade do módulo, e o básico, a criação do arquivo .info, e o início da construção do módulo, com o arquivo .module, que nada mais é um arquivo .php.
Lembrando que este tutorial foi totalmente baseado neste tutorial do Drupal.org.
Vamos agora revisar as interfaces e links que deverão ser criados:
Todas estas opções serão criadas através hooks (em português, ganchos), que são funções especiais que criam as interfaces do Drupal. A regra diz que um hook tem que seguir a seguinte sintaxe: function nomedomodulo_nomedohook(parâmetros) { //conteudo do hook }.
Abaixo, estão listados todos os Hooks utilizados no módulo:
<?php
// $Id$
function donatepagseguro_help($path, $arg) {
// cria a pagina de ajuda
} // function donatepagseguro_help
function donatepagseguro_perm() {
// cria o controle de permissoes
} // function donatepagseguro_perm()
function donatepagseguro_block($op = 'list', $delta = 0, $edit = array()) {
// cria o(s) bloco(s) do modulo
} // function donatepagseguro_block()
function donatepagseguro_admin() {
// cria a administracao do bloco
} // function donatepagseguro_admin()
function donatepagseguro_admin_validate($form, &$form_state) {
Faz a validação do formulario da pagina de administracao
} //function donatepagseguro_admin_validate()
function donatepagseguro_menu() {
// cria o link do menu
} //function donatepagseguro_menu()
Em cada um dos hooks, eu linkei para a respectiva página do mesmo na página de API do Drupal. Observer que donatepagseguro_admin() não é um hook. Por isso, o conteúdo dele pode ser construído da forma que quisermos.
Legal. No tutorial de hoje, vamos construir a página de ajuda e as permissões.
Para a ajuda do usuário, eu quero criar duas mensagens:
Isso será feito usando o hook _help, como foi dito:
function donatepagseguro_help($path, $arg) {
$output = ''; //declare your output variable
switch ($path) {
case "admin/help#donatepagseguro":
$output = '
'. t("Um módulo simples que habilita um bloco com o botão de Doação do PagSeguro no site.") .'
';
$output .= '
' . t('Para fazer uso deste módulo, é necessário que você tenha ou crie uma conta no PagSeguro. Para se cadastrar, acesse esta página e clique em "Cadastre-se Já".') . '
';
break;
case "admin/settings/donatepagseguro":
$output = '
'. t('Para utilizar este módulo é necessário criar uma conta no PagSeguro.') .'
';
break;
}
return $output;
} // function donatepagseguro_help
Observe que este hook recebe dois parâmetros, as variáveis $path (caminho) e $arg. O $path, que nada mais é que o endereço das páginas onde as mensagens serão impressas, é o que será utilizado no tutorial. Não é necessário usar as $args, mas eventualmente, posso voltar a tratar delas.
O que foi feito dentro desta função:
Declaro uma variável, chamada $output, cujo conteúdo será a mensagem de ajuda.
Eu testo o valor da variável $path, utilizando um switch: Se o usuário estiver acessando for admin/help#donatepagseguro, o valor de $output será X, caso o caminho que o usuário estiver acessando for admin/settings/donatepagseguro, o valor de $output será Y. por fim, eu retorno o valor da variável (return $output);
Criar permissões para um módulo é muito simples. A documentação do Drupal sugere que você siga a forma "verbo_acao nome_do_modulo". Por exemplo, "administrar donatepagseguro", "acessar donatepagseguro", etc.
As permissões do módulo PagSeguro ficaram assim:
function donatepagseguro_perm() {
return array('Administrar Donate PagSeguro');
} // function donatepagseguro_perm()
Simples assim. Se por acaso, o módulo tiver vários acessos a partes diferentes do módulo, basta declarar os acessos em linha, separados por vírgula:
function donatepagseguro_perm() {
return array('Administrar blá', 'Acessar blá', 'Acessar bló');
} // function donatepagseguro_perm()
Mais na frente no tutorial, iremos associar a regra de acesso a um item do menu, que será criado utilizando o hook _menu.
E por Hoje é só pessoal!! Nos vemos na próxima semana, na mesma bat-hora e no mesmo bat-canal.
copyright © Marcus VBP, Todos os direitos reservados
Permitida a cópia desde que citado a fonte. [Política de Privacidade]
Powered by Drupal CMS.
Comentários recentes
3 horas 12 minutos atrás
1 dia 2 horas atrás
3 dias 12 horas atrás
1 semana 1 dia atrás
1 semana 1 dia atrás
1 semana 2 dias atrás
1 semana 5 dias atrás
1 semana 6 dias atrás
1 semana 6 dias atrás
2 semanas 3 dias atrás