Code PHP pour varier dans un template Joomla 3.9 l'affichage des modules en fonction de la vue blog de catégorie ou article en plein.

Édité le

E-créatif

Varier en PHP l’affichage des modules dans Joomla en fonction de la vue article ou catégorie

E-créatif

Dans la série création de template Joomla, astuces intégrateur.

C’est une difficulté dans Joomla que de distinguer les modules qui s’affichent en fonction de la vue blog de catégorie ou article en plein, après avoir cliqué sur le readmore…
En effet, on paramètre l’affichage d’un module en fonction d’un lien de menu, hors le Blog d’une catégorie ne distingue pas les deux modes d’affichages.

On est donc confronté à un problème graphique sur les sites à colonnes latérales : en vue blog ou liste d’introductions d’article, la page est longue, on charge les modules… Mais lorsqu’on clique sur Lire la suite, la page de l’article en entier est très courte, et la colonne de modules est très longue…
Soit dit en passant cela se gère facilement sur WordPress (templates category et single), ou sur Prestashop qui utilise Smarty.

On pourrait certes s’orienter vers des plugins, se dire que Joomla aurait pu l’intégrer dans les paramétrages, ou encore que le code « JRequest::getVar » devrait fonctionner, mais celui-ci est déprécié depuis Joomla 3.8…

Voici le code pour qu’un module ne s’affiche que sur la vue « category », soit les introductions d’articles en vue blog :


<?php
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$view = $jinput->getCmd('view');
$layout = $jinput->getCmd('layout');
if ($option == 'com_content' && $view == 'category' && $layout == 'blog') { ?>
<jdoc:include type="modules" name="nomdelaposition" style="xhtml" />
<?php } ?>

A l’inverse, pour que les modules ne s’affichent que sur la vue « article » en entier, remplacez :

if ($option == 'com_content' && $view == 'category' && $layout == 'blog') { ?>

par :

if ($option == 'com_content' && $view == 'article') { ?>

Et le tour est joué !