Sempre que você precisa adicionar um novo elemento em nível de página (seja uma imagem, um bloco customizado, uma lista de links, uma view ou até um texto específico) você provavelmente utiliza:
Mas você alguma vez já se perguntou de onde vem $vars[‘page’] e suas regiões, por exemplo, $vars[‘page’][‘content’], na página (page)? HÁ! Com certeza não é de um outro preprocess. Então, é ai que entra um hook novo do Drupal 7:
- hook_page_build(&$page)
– Para adicionar novos elementos. - hook_page_build_alter(&$page)
– Alterar elementos já existentes.
Na prática, por exemplo, se eu quiser adicionar uma lista de links sempre no final da região content da página, que é onde se encontra o conteúdo, poderia criar um módulo padrão para customizações em geral, chamado de “custom”. Vamos por passos:
- Criar um módulo chamado custom na pasta /sites/modules/all
- Criar o custom.info
name = Custom description = Provide customizations. package = Custom core = 7.x version = 7.x-1.x-dev
- Criar o custom.module
<?php /** * Implements hook_page_build(). */ function custom_page_build(&$page) { // For some reason with Overlay enabled we get an empty $page, so just fail this case. if (!isset($page['content'])) { return; } // We are on a node detail page. if ($node = menu_get_object('node', 1) && arg(2) == NULL) { // Force to rebuild the sorting $page['content']['#sorted'] = FALSE; $page['content']['custom_links'] = array( '#theme' =?> 'links', '#links' => array( 'go_top' => array( 'title' => t('Go to top'), 'href' => current_path(), 'fragment' => 'top', ), 'drupal_org' => array( 'title' => t('Go to Drupal.org'), 'external' => TRUE, 'href' => 'http://drupal.org', 'attributes' => array( 'target' => '_blank', ), ), ), '#weight' => 99, ); } }
- Habilite o módulo Custom
- Os links só vão aparecer quando você estiver em uma página interna de nodes (/node/%)
- Vá até o final do conteúdo do node e deverá ter alguma coisa parecida com isso:
Se os links aparecem no final da página, se sinta realizado, pois acabou de colocar um novo elemento em uma região específica sem muito código e de maneira limpa e fácil para dar manutenção em futuras modificações!
Obs.: Repare que utilizei uma render() array, isso significa que se em seu page.tpl.php deve se encontrar algo parecido com isso:
print render(
$page
[
'content'
]);
O novo elemento aparecerá automaticamente e já na ordem certa.
Abraço, galera! Até o próximo post!
***
Artigo publicado originalmente no Drupal de Elite – http://drupaldeelite.com.br/blog/adicionando-novos-elementos-na-pagina-usando-hookpagebuilder