Lorsque vous affichez un nœud dans le template node.tpl.php
ou une de ses surcharges
(ex: node--article.tpl.php
), vous avez souvent besoin d'effectuer des traitements particuliers.
Pour séparer la partie traitement de l'affichage, il est préférable de mettre le maximum de code
PHP dans votre fichier mymodule.module
(ou mieux, dans d'autres fichiers PHP à vous).
Pour cela, utilisez le hook_node_view()
.
Par exemple si dans le template d'un article on veut afficher les 3 derniers articles publiés :
/**
* Implements hook_node_view().
*/
function mymodule_node_view($node, $view_mode, $langcode) {
global $language;
if ($node->type === 'article) {
// Last published articles
$query = db_select('node', 'n')
->fields('n', array('nid'))
->condition('status', 1)
->condition('bundle', 'article')
->orderBy('changed', 'DESC')
->range(0, 3);
$nids = $query->execute()->fetchCol();
$nodes = !empty($nids) ? node_load_multiple($nids) : array();
$node->content['last_published_articles'] = $nodes;
}
}
Explications :
- On vérfie le type de nœud, pour n'effectuer le traitement que pour les articles
- La requête récupère les nids des nœuds recherchés. Ils sont ensuite chargés.
- Les nœuds sont envoyés en paramètre au template.
La variable
$content['last_published_articles']
sera disponible dans le template.
Remarque :
- En général on ajoute une condition sur le type d’affichage (Contenu complet, Accroche, ...) disponible via
la variable
$view_mode
, pour éviter d'effectuer le traitement là où c'est inutile.