As regiões podem ser impressas em um modelo de nó ou estão estritamente restritas aos modelos de página?
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-templateblock_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.