Marcus VBP

Desenvolvimento de Interfaces WEB

Comentários recentes

Desenvolvendo um módulo do Drupal, parte Final (ou seria o Início?)

03 MAI 2009

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:

  • Um bloco, com duas exibições: o bloco propriamente dito, e também a listagem na página de administração de blocos;
  • Uma página de administração; (feito)
  • Um link para a página de Administração;
  • Uma página de ajuda (feito);
  • A configuração de permissões do bloco (qual papel de usuário poderá acessar a página de administração) (feito);
  • A configuração de permissões do bloco (qual papel de usuário poderá acessar a página de administração) (feito);

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).

Criando um item de menu com o hook menu

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:

citação:

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:

  • 'list':A lista de todos os blocos definidos pelos bloco.
  • 'configure': O formulário de configuração do bloco.
  • 'save': Salva a configuração do bloco.
  • 'view': Processa o bloco quando o mesmo está habilitado em uma região, a fim de exibir o seu conteúdo.

O início do nosso bloco fica assim:

citaçã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'),
);
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:

citação:

<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:

citaçã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:

citaçã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>';
};
// 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:

citaçã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>';
};
// 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:

citaçã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>';
};
// 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:

O Bloco Gerado Pelo Módulo

O Fim, ou seria o Começo?

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!!

RSS dos coment?ios deste post

3 Comentários:

imagem de Ramon Samudio

1. Ramon Samudio*

Disse em sex, 09/04/2010 - 13:04

Como faço para melhorar o page rank do meu site?

imagem de Joelson

2. Joelson*

Disse em sab, 19/06/2010 - 18:50

E ae camarada, bacana mesmo seu site. Um incentivo a quem está começando nos duros e sinuosos caminhos do desenvolvimento web. Parabéns.

Ah, sua index tá estourando no final.

imagem de Maria Luisa

3. Maria Luisa*

Disse em dom, 29/08/2010 - 16:56

Oi,

um dos seus posts me deixou curiosa. encontrei através do google. poderias me add no msn ou me enviar um e-mail pra te explicar melhor?

Enviar novo comentário

O conteúdo deste campo é privado não será exibido publicamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Você pode citar outras contribuições usando marcações [quote].
  • Endereços de páginas de internet e emails viram links automaticamente.
  • Linhas e parágrafos quebram automaticamente.

copyright © Marcus VBP, Todos os direitos reservados

Permitida a cópia desde que citado a fonte. [Política de Privacidade]

Powered by Drupal CMS.