Como criar um módulo (parte 2) - Drupal 7

da parte 1, conforme prometido, falo agora sobre a implementação do hook_menu.

Implementação de um Hook

O Drupal é feito em um sistema de hooks, que em alguns momentos também se chamam callbacks. Durante o caminho de execução, o Drupal pergunta aos módulos se eles querem fazer alguma coisa. Por exemplo, quando um node começa a ser chamado do banco de dados priorizando o início de exibição em uma página, o Drupal examina todos os módulos habilitados para ver qualquer coisa que algum deles tenha implementado que chame a função

Olá pessoas! Seguindo o ritmo da parte 1, conforme prometido, falo agora sobre a implementação do hook_menu.

Implementação de um Hook

O Drupal é feito em um sistema de hooks, que em alguns momentos também se chamam callbacks. Durante o caminho de execução, o Drupal pergunta aos módulos se eles querem fazer alguma coisa. Por exemplo, quando um node começa a ser chamado do banco de dados priorizando o início de exibição em uma página, o Drupal examina todos os módulos habilitados para ver qualquer coisa que algum deles tenha implementado que chame a função hook_node_load(). Então, se alguma coisa chamar esse hook, o Drupal executa o hook do módulo como prioridade, antes de renderizar o node na página. Vou ver como isso funciona no módulo custom_deploy.

O primeiro hook que vou implementar é a função hook_menu(). Com essa função vou adicionar dois itens de menu no menu administrativo do meu site. Um deles é um novo item "Custom deploy", que servirá para fazer o Deploy com um comentário e vai ficar como sub item de /admin/config/system. Também terá ainda mais um sub item deste que criei, um "Settings", que terá as configurações de comportamento do Deploy. Os valores dos itens de menu são arrays que consistem em chaves e valores que descrevem o que o Drupal deve fazer quando o path é requisitado. Então, vou nomear minha função de "custom_deploy_menu()", trocando "hook" pelo nome do meu módulo. Isso é um padrão para todos os hooks, a gente sempre deve trocar "hook" pelo nome do nosso módulo.

Meu hook, dentro do custom_deploy.module, ficou assim:

/**
 * Implementation of hook_menu().
 */
function custom_deploy_menu() {
  $items['admin/config/system/custom_deploy'] = array(
    'title' => 'Custom Deploy',
    'description' => 'Run my custom deploy.',
    'wight' => -5,
    'page callback' => 'drupal_get_form',
    'page arguments' => array('custom_deploy_admin_run'),
    'access arguments' => array('administer site cofiguration'),
    'file' => 'custom_deploy.admin.inc',
  );

  $items['admin/config/system/custom_deploy/settings'] = array(
    'title' => 'Custom Deploy Settings',
    'description' => 'Configure custom deploy',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('custom_deploy_admin_settings'),
    'access arguments' => array('administer site configuration'),
    'type' => MENU_NORMAL_ITEM,
    'file' => 'custom_deploy.admin.inc',
  );

  return $items;
}

Não precisa se preocupar muito sobre os detalhes até esse momento. O código diz o seguinte:

"Quando o usuário acessar http://drupaldeelite.com.br/admin/config/system/custom_deploy, a função drupal_get_form() é chamada, passando o ID do formulário custom_deploy_admin_run. Quando acessar http://drupaldeelite.com.br/admin/config/system/custom_deploy/settings, a mesma função drupal_get_form() é chamada, passando o ID do formulário custom_deploy_admin_settings. Essas funções serão descritas no arquivo custom_deploy.admin.inc. Somente usuários com permissão de administer site configuration poderão ver e acessar esses itens de menu."

Quando chega a hora de exibir o formulário, o Drupal nos pede por uma definição de formulário. Quando o Drupal terminou de pedir a todos os módulos pelos seus itens de menu, existe um menu a partir do qual é possível selecionar a função adequada para chamar o caminho que está sendo solicitado. É por isso que chamei pelo hook_menu(). Se você estiver interessado em ver a função que monitora o mecanismo hook, olhe a função module_invoke_all() em /includes/module.inc (http://api.drupal.org/api/function/module_invoke_all/7). Os hooks do Drupal permitem modificar quase tudo de qualquer coisa no software. A lista completa dos hooks suportados e os respectivos usos podem ser encontrados no site de documentação da API do Drupal: http://api.drupal.org/api/group/hooks/7.

No próximo post sobre esse assunto, a parte 3, falarei sobre adicionar configurações específicas no módulo. Se você gostou ou teve proveito deste post, pode retribuir com comentários, curtindo e compartilhando. Quando sair a continuação, aqui terá um link. Até breve!