Surcharger la vue d’un module Joomla

de | 28 septembre 2011

Modification d'un module Joomla

Joomla étant un CMS dont la programmation est basée sur le modèle MVC (modèle, vue, contrôleur), il est possible de modifier chacun des éléments de façon indépendante. Nous allons voir dans cet article comment modifier la vue d’un module et pourquoi le faire.

Ces explications sont valables pour Joomla 1.5 à Joomla 1.7 (et jusqu’à à 2.5 d’après la roadmap de l’équipe de développement).

Pourquoi modifier la vue d’un module

Vous pouvez ne pas être satisfait de la façon dont s’affiche certains éléments et vous voudriez modifier cela. Malheureusement pour vous les options de modifications ne sont pas forcément disponibles dans la partie administration de Joomla. Il vous faut donc modifier Joomla.

Vous pouvez modifier le code de Joomla où bon vous semble. Cependant, modifier la vue présente un avantage certain : en surchargeant la vue dans votre template, vous n’appliquer aucune modification au coeur de Joomla.

L’idée n’est donc pas réellement de modifier la vue, mais plutôt de créer une nouvelle vue dans votre template pour le module Joomla qui nous intéresse.

Dans cet article nous allons prendre le module de statistiques Joomla qui permet d’afficher des infos sur le nombre d’article, le nombre de visiteurs ou le serveur sur lequel le site est installé.

Nous allons configurer le module de cet manière :

Configuration du module de statistiques Joomla

Configuration du module de statistiques Joomla

Et obtenir ce résultat sur le site :

Module de statistiques Joomla

Module de statistiques Joomla

Ce résultat ne nous convient pas car nous souhaitons uniquement afficher le nombre d’articles du site et non le nombre de visiteurs qui sont sur le site.

Surcharger la vue d’un module Joomla

Pour surcharger la vue du module, nous allons déjà créer un répertoire html dans le répertoire de notre template ce qui va donner cette arborescence depuis la racine du site :

templates/nom-du-template-utilisé/html/

De la même manière, créer encore un sous répertoire du nom du module que vous voulez modifier et copier un fichier index.html vide à l’intérieur (pour des raisons de sécurité) :

templates/nom-du-template-utilisé/html/mod_stats/index.html

Une fois cecei réalisé vous devez copier le fichier default.php du sous-répertoire tmpl du module dans le répertoire de votre template :

Copier : modules/mod_stats/tmpl/default.php

Vers : templates/nom-du-template-utilisé/html/mod_stats/default.php

Le fichier default.php de votre template est celui que vous allez pouvoir modifier sans risquer de casser votre CMS. De même, en cas de problème lors d’une mise à jour vous n’avez qu’à reprendre le nouveau fichier default.php original et appliquer une nouvelle fois vos mises à jour

Modification du code de la vue du module Joomla

Dans notre exemple, nous cherchons à supprimer des informations rapatriées par le module. Il faut donc qu’on modifie le code PHP de la vue de ce module.

Voici le code original de la vue du module mod_stats :

<?php
/**
 * @version             $Id: default.php 20196 2011-01-09 02:40:25Z ian $
 * @package             Joomla.Site
 * @subpackage  mod_stats
 * @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
 * @license             GNU General Public License version 2 or later; see LICENSE.txt
 */

// no direct access
defined('_JEXEC') or die;
?>
<dl class="stats-module<?php echo $moduleclass_sfx ?>">
<?php foreach ($list as $item) : ?>
        <dt><?php echo $item->title;?></dt>
        <dd><?php echo $item->data;?></dd>
<?php endforeach; ?>
</dl>

Nous souhaitons supprimer le nombre de visiteurs de l’affichage du module. Il y a donc plusieurs façon de mettre au point cette modification, mais l’une des plus simple et de faire un test sur le titre de la données retournée. Ainsi, après modification le code obtenu est le suivant :

<?php
/**
 * @version             $Id: default.php 20196 2011-01-09 02:40:25Z ian $
 * @package             Joomla.Site
 * @subpackage  mod_stats
 * @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
 * @license             GNU General Public License version 2 or later; see LICENSE.txt
 */

// no direct access
defined('_JEXEC') or die;
?>
<dl class="stats-module<?php echo $moduleclass_sfx ?>">
<?php foreach ($list as $item) : ?>
        <?php if ($item->title <> "Visiteurs") :?>
                <dt><?php echo $item->title;?></dt>
                <dd><?php echo $item->data;?></dd>
        <?php endif; ?>
<?php endforeach; ?>
</dl>

Nous obtenons alors ce résultat :

Module de stats Joomla après modification

Module de stats Joomla après modification

Naturellement, si vous gérer un site en plusieurs langues cette solution ne fonctionnera peut être pas ! A vous de trouver la meilleure solution pour arriver à faire correspondre l’affichage d’un module Joomla à vos besoins.

Conclusion : la surcharge de module Joomla

Comme vous l’avez vu dans cet article il est possible d’arriver à modifier l’affichage des informations retournées par un module Joomla.

Pour garder une excellente compatibilité avec les futures mises à jour du CMS Joomla il faudra naturellement bien penser à surcharger la vue de votre module dans le template et non pas modifier directement le code des fichiers du coeur de Joomla.

7 réflexions au sujet de « Surcharger la vue d’un module Joomla »

  1. Ping : Modifier Joomla (surcharger la vue des composants standards)

  2. Freelance Joomla Strasbourg

    Est-il possible de surcharger plusieurs modules en même temps ?
    Je souhaite unifier l’aspect graphique des modules (recherche, login, derniers articles, etc.). Cela s’effectue t-il par la « surcharge » ?

  3. Nicolas Auteur de l’article

    Il est possible de surcharger tous les modules et extensions Joomla en même temps. C’est même le principal intérêt de la surcharge.
    Le principe est le même pour tous les modules et change un peu pour les extensions.

    Mais attention : nous sommes « tombés » parfois sur des extensions tierces programmées de façon à ce que la surcharge soit quasi impossible. Dans ce cas, on modifie directement le code de l’extension si c’est possible…

  4. Freelance Joomla Strasbourg

    Merci pour votre réponse. Que faut-il modifier pour impacter tous les modules ? Prévoyez-vous un article sur les étapes à suivre ? (ou avez-vous des sources à conseiller ?)

    PS : je découvre ce blog, et les articles sont intéressants et clairs ! Bonne continuation !!

  5. Nicolas Auteur de l’article

    Chaque module est modifiable de la même façon que celui présenté dans l’article (par recopie et modification du fichier default.php).
    Malheureusement, nous ne pouvons pas détailler la procédure pour chaque module (le temps manque).
    Bonne continuation.

  6. Adrien

    Je suis développeur web et je découvre Joomla.

    Je trouve le code des vues pas très propre (HTML dans du PHP et inversement).
    J’ai l’impression de revoir mon code quand je développais en PHP 3.

    N’est-il pas possible d’intégrer un moteur de templates pour bien séparer le tout, style TWIG, SMARTY ou autre.

    Je ne sais pas comment vous arrivez à lire du code comme cela, c’est incompréhensible… Enfin c’est peut-être la volonté de Joomla mais je trouve cela un peu dommage pour un CMS aussi renommé que celui là…

    Merci pour votre retour.

  7. Freddy Spow

    Bonjour et merci pour ce tuto qui m’a été bien utile, outre pour bien piger les surcharges, tout simplement pour afficher un compteur simple des articles sur un site et rien d’autre

    mais… le compteur affiche tout les articles, en publication différée, publiés ou non-publiés or ce qui me comblerai c’est qu’il n’affiche QUE les articles publiés

    j’ai essayé de trifouiller le code mais je suis très mauvais en php et n’y arrive pas

    quelqu’un pourrait-il m’aider?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.