avril 12 2009
Surcharger les composants sous Joomla 1.0.X
Tagged Under : affichage, astuce, développement, Joomla, joomla 1.0, surcharge
L’une des nouveautés de Joomla 1.5, est la possibilité de surcharger l’affichage par défaut des composants.
Sous Joomla 1.0, dès que l’on souhaitait modifier légèrement l’affichage d’un composant, on était contraint de modifier le code source de ce dernier. Cela avait pour conséquence de compliquer la maintenance des sites sous Joomla. En effet, il n’était plus possible de suivre bêtement la procédure de mise à jour de Joomla pour appliquer un patch corrigeant une faille de sécurité par exemple.
En réalité, redéfinir l’affichage des composant est possible également sous Joomla 1.0. La technique consiste à créer un mambot système qui va modifier l’objet global $mainframe. Il est possible de modifier le comportement de $mainframe, mais également de l’étendre, de l’enrichir… Cette technique peut également être utilisé à d’autres fins : tels que la modification du comportement de l’objet global $database….
Voici un premier exemple qui va modifier, de façon transparente pour Joomla, l’objet $mainframe, afin de lui ajouter de nouvelles fonctionnalités, ou afin de modifier son comportement.
or die( 'Direct Access to this location is not allowed.' );
$_MAMBOTS->registerFunction(
'onAfterStart',
'extendMosMainframe' );
function extendMosMainframe {
global $mainframe;
$mainframe = new mosExtendMainframe($mainframe);
}
/*
* Cette extension n'a aucun intérêt si de nouvelles
* méthodes, de nouvelles ne sont pas ajoutées dans
* la classe mosExtendMainframe, ou si des méthodes
* de mosMainframe ne sont pas surchargées
*/
class mosExtendMainframe extends mosMainframe{
// Récupération de l’ensemble des propriétés
//de l’objet $mainframe initial
function __construct($mosmainframe){
$vars = get_class_vars("mosMainframe");
foreach($vars AS $key=>$value) {
$this->$key = $mosmainframe->$key;
}
}
}
L’objet $mainframe est capital au sein de Joomla. En le modifiant certaines de ses propriétés, vous serez à même de redéfinir le nom des fichiers appartenant à un composant. Voici un exemple très succint, à placer au sein d’un mambot système :
$mainframe->_path->front=
$mos_config_absolute_path.
"/components/com_content/content.redefined.php";
$mainframe->_path->front_html=
$mos_config_absolute_path.
"/components/com_content/content.redefined.html.php";
$mainframe->_path->class=
$mos_config_absolute_path.
"/components/com_content/content.redefined.class.php";
$mainframe->_template =
"redefined";
}

