Imprimir uma views dentro de um node

Como a própria documentação diz, o snippet anterior existe para realizar tal tarefa de uma maneira simples e fácil:

This function is meant to be called from PHP snippets, should one wish to embed a view in a node or something. It's meant to provide the simplest solution and doesn't really offer a lot of options, but breaking the function apart is pretty easy, and this provides a worthwhile guide to doing so.

Primeiramente será necessário criar ou editar o template.php do seu tema. Vamos utilizar a função template_preprocess_node(), a qual é utilizada para processar as variáveis dos nodes antes de serem enviadas para o template.

O snippet a seguir verifica se o tipo de conteúdo é "artigos" e cria uma nova variável chamada $outros_artigos.

// Substitua SEUTEMA pelo nome do seu tema
function SEUTEMA_preprocess_node(&$vars) {
  if($vars['type'] == 'artigos') {
    $vars['outros_artigos'] = views_embed_view('artigos', 'block_1');
  }
}

Após isso edite o arquivo node.tpl.php do seu tema e coloque o seguite markup:

<?php if($outros_artigos) { ?>
<div class="outros-artigos"><?php print $outros_artigos; ?></div>
<?php } ?>

Abaixo o resultado:

Imprimindo uma views dentro de um node

Com um pouco de css seu layout pode ficar assim:

Imprimindo uma views dentro de um node

Isso é apenas um pequeno exemplo do que é possível fazer. Sua necessidade é quem dita as regras ;)

Além disso podemos tirar proveito de todos os recursos da views tais como: relações, paginação de resultados, ajax, filtros, permissões, etc.

Imprimindo uma views dentro de um node

Espero que seja útil. Por favor deixe seu comentário a respeito :)

Até o próximo


Comentários

Marcelo Spano

Grande Professor Miguel,

Chamei de professor porque esse post foi uma grande aula para mim. Você me conhece e sabe, estou em constante aprendizado né. Você sempre comentou sobre os preprocess, que é uma mão na roda e tal, só que eu ainda (que vergonha) não tinha utilizado... Esse seu post motrou quão simples e útil é a sua utilização... eu até esqueci que o post era sobre "Views".

Forte abraço
Marcelo

Lucas

Oi Miguel! este artigo é parte de uma coisa que eu queria fazer no meu site, agora que aprendi como imprimir uma view dentro de um node, seria interessante (pra min) saber como eu relaciono essa view a outro node, eu queria usar o CCCK (node reference) para chamar alguns campos de um node dentro de outro, e que fosse possível chamar mais de um node dentro de outro... me da uma Luz Miguel! :D