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="http://marcusvbp.com.br/site/%3Cstrong%3E%7Bdonatepagseguro_btns%7D%3C/s..." 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:
   <em> // se existir texto de ajuda, coloque-o no conteúdo do bloco</em>
    <strong>if(variable_get('donatepagseguro_ajuda', '') != '') {
      $block_content = '&lt;div class="info"&gt;' . variable_get('donatepagseguro_ajuda', '') . '&lt;/div&gt;';
    };</strong>
  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:
   <em> // se existir texto de ajuda, coloque-o no conteúdo do bloco</em>
    if(variable_get('donatepagseguro_ajuda', '') != '') {
      $block_content = '&lt;div class="info"&gt;' . variable_get('donatepagseguro_ajuda', '') . '&lt;/div&gt;';
    };
    <em>// utiliza o botão selecionado pelo usuário</em>
    <strong>switch (variable_get('donatepagseguro_btns',0)) {
      case 0:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoacao.jpg" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 1:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoar.jpg" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 2:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/btncontribuicao.jpg" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 3:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/FacaSuaDoacao.gif" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 4:
        $donatepagseguro_btn = '&lt;input type="image" src="http://marcusvbp.com.br/site/%27.%20variable_get%28%27donatepagseguro_linkbotao%27%2C%27https%3A//pagseguro.uol.com.br/Imagens/btndoacao.jpg%27%29%20.%27" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
    }</strong>
  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:
   <em> // se existir texto de ajuda, coloque-o no conteúdo do bloco</em>
    if(variable_get('donatepagseguro_ajuda', '') != '') {
      $block_content = '&lt;div class="info"&gt;' . variable_get('donatepagseguro_ajuda', '') . '&lt;/div&gt;';
    };
    <em>// utiliza o botão selecionado pelo usuário</em>
    switch (variable_get('donatepagseguro_btns',0)) {
      case 0:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoacao.jpg" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 1:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoar.jpg" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 2:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/btncontribuicao.jpg" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 3:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/FacaSuaDoacao.gif" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 4:
        $donatepagseguro_btn = '&lt;input type="image" src="http://marcusvbp.com.br/site/%27.%20variable_get%28%27donatepagseguro_linkbotao%27%2C%27https%3A//pagseguro.uol.com.br/Imagens/btndoacao.jpg%27%29%20.%27" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
    }

    <strong>$block_content .='
    &lt;form action="https://pagseguro.uol.com.br/security/webpagamentos/webdoacao.aspx" method="post"&gt;
      &lt;fieldset&gt;
        &lt;input type="hidden" name="email_cobranca" value="'. variable_get('donatepagseguro_email','') .'" /&gt;
        &lt;input type="hidden" name="moeda" value="BRL" /&gt;
        '. $donatepagseguro_btn .'
      &lt;/fieldset&gt;
    &lt;/form&gt;
    ';</strong>

  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:
   <em> // se existir texto de ajuda, coloque-o no conteúdo do bloco</em>
    if(variable_get('donatepagseguro_ajuda', '') != '') {
      $block_content = '&lt;div class="info"&gt;' . variable_get('donatepagseguro_ajuda', '') . '&lt;/div&gt;';
    };
    <em>// utiliza o botão selecionado pelo usuário</em>
    switch (variable_get('donatepagseguro_btns',0)) {
      case 0:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoacao.jpg" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 1:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/btndoar.jpg" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 2:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/btncontribuicao.jpg" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 3:
        $donatepagseguro_btn = '&lt;input type="image" src="https://pagseguro.uol.com.br/Imagens/FacaSuaDoacao.gif" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
        break;
      case 4:
        $donatepagseguro_btn = '&lt;input type="image" src="http://marcusvbp.com.br/site/%27.%20variable_get%28%27donatepagseguro_linkbotao%27%2C%27https%3A//pagseguro.uol.com.br/Imagens/btndoacao.jpg%27%29%20.%27" name="submit" alt="Fa&ccedil;a uma doa&ccedil;&atilde;o com PagSeguro" /&gt;';
    }

    $block_content .='
    &lt;form action="https://pagseguro.uol.com.br/security/webpagamentos/webdoacao.aspx" method="post"&gt;
      &lt;fieldset&gt;
        &lt;input type="hidden" name="email_cobranca" value="'. variable_get('donatepagseguro_email','') .'" /&gt;
        &lt;input type="hidden" name="moeda" value="BRL" /&gt;
        '. $donatepagseguro_btn .'
      &lt;/fieldset&gt;
    &lt;/form&gt;
    ';
    <em>// set up the block</em>
    $block = array(
      'subject' => 'Fa&ccedil;a uma doa&ccedil;&atilde;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!!

Comentários

Ramon Samudio

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

Joelson

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.

Maria Luisa

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?

Thalles

Kra,

Pelo jeito nas 4 partes desse tutorial eu fui o único que realmente queria saber sobre Drupal.
Acho que nem vai ler esse coment, analisando a data do post e os comentários mils que deve receber... Mas gostei bastante, entrei como estagiário em uma agencia de publicidade aqui no Rio, meu trabalho vai ser esse que fez só que mil vezes mais complicado, tipo cadastro de imóveis, alteração, etc, etc, nem imagino como fazer isso em Drupal. Seu post foi bacana mas tb me mostrou que é muita coisa, talvez eu não dê conta.

Sucesso pra ti!
Abraços

Comentar