afficher bloc connexe via preprocess

Tags:

Source: http://www.webenstock.com/fr/blog/2012-08-04-inserer-bloc-dans-node-avec...

On a créé une view (nom system: related_articles), qui affiche un bloc "articles connexes" (qui partagent le meme tag) -> cf article 1. Pour ne pas que ce bloc s'affiche sous les commentaires, on veux insérer ce bloc dans un node, à l'aide de node--article.tpl.php et theme_preprocess_node().

Afficher le bloc dans un tpl

Copier node.tpl.php en node--article.tpl.php avec, juste au dessus du print render($content['comments']) :

<?php
if ($page){
   print
views_embed_view('related_articles', $display_id = 'block');
}

?>
Ou, si l'on veux afficher le titre de la vue:
<?php
if ($page){
   
// Donner le nom système de la vue
   
$view = views_get_view('related_articles');
   
// Prendre le titre de la vue
   
print '<h2>'.$view->get_title().'</h2>';
   
// Donner Id de l'affichage
   
print $view->preview('block'); 
}

?>

C'est mieux d'éviter de mettre du code dans les fichiers tpl, ie de mettre la logique à un niveau supérieur : au niveau du preprocess du node.

Afficher bloc par fonction preprocess

Dans template.php de notre theme, on va ajouter du code pour créer une var $related (qui contiendra notre bloc) accessible à partir de nos tpl.

<?php
function NOM-DU-THEME_preprocess_node(&$variables) {
 
// .....
  // Afficher le bloc des articles associés seulement pour les articles
et pas dans le teaser
  if ($variables['type'] == 'article' and !$variables['teaser']){
   
$view_node = views_get_view('related_articles');
   
$myblock_related = '<h2>'.$view_node->get_title().'</h2>';
   
$myblock_related .= $view_node->preview('block');

   
$variables['content']['related'] = $myblock_related;
  }
}

?>
 

Dans node--article.tpl, juste au dessus de print render($content['comments']), ajouter :

<?php
if ($page){
  
// afficher les articles associés
  
print render($content['related']);
}

?>

 

La fonction views_embed_view()
La fonction template_preprocess_node()
Le tpl node.tpl.php
La fonction render()

logo drush