Respostas:
Você pode imprimir regiões dentro de qualquer modelo, mas elas não estão disponíveis fora da caixa no node.tpl.php
modelo. Para disponibilizá-los, você criará uma nova variável para uso em seu node.tpl.php
modelo que conterá todo o conteúdo da região.
A criação de novas variáveis de modelo é feita usando uma função de pré-processo. No template.php
arquivo do seu tema , crie uma função parecida com esta:
function mytheme_preprocess_node(&$variables) {
}
Substituindo mytheme
pelo nome abreviado do seu tema. Agora, para que o Drupal reconheça essa nova função de pré-processo, você precisa reconstruir o registro de temas do seu site. Isso é tão simples quanto acessar Configuração → Desenvolvimento → Desempenho e pressionar o botão "Limpar todos os caches" na parte superior.
Agora, a maneira como as funções de pré-processo funcionam é que $variables
contém uma matriz que corresponde às variáveis disponíveis do seu modelo. Por exemplo, em node.tpl.php
, $submitted
contém o autor byline. Na função de pré-processo acima, é encontrada em $variables['submitted']
.
Para imitar o que você tem page.tpl.php
, onde você tem uma matriz chamada $page
que contém todas as regiões, convém preencher $variables['page']
.
O problema é que $page
in node.tpl.php
já está preenchido com um valor verdadeiro / falso que permite saber se você está olhando o nó sozinho ou em uma listagem.
Portanto, para evitar essa colisão de nomes, preencha $region
:
function mytheme_preprocess_node(&$variables) {
// Get a list of all the regions for this theme
foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {
// Get the content for each region and add it to the $region variable
if ($blocks = block_get_blocks_by_region($region_key)) {
$variables['region'][$region_key] = $blocks;
}
else {
$variables['region'][$region_key] = array();
}
}
}
Em seguida, no node.tpl.php
modelo do seu tema , você pode renderizar qualquer região fazendo o seguinte:
<?php print render($region['sidebar_first']); ?>
Onde sidebar_first
é o nome da região que você deseja renderizar.
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>
. A partir daqui: webomelette.com/add-region-node-template
block_get_blocks_by_region()
retorna apenas uma matriz de blocos e, se você quiser renderizá-lo como uma região, precisará adicionar um wrapper de região.