Un blog sur les logiciels libres

Des articles basés essentiellement sur VirtueMart, Joomla, Talend...

avril 12 2009

Surcharger les composants sous Joomla 1.0.X

Tagged Under : , , , , ,

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.

defined( '_VALID_MOS' )
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 :

if ($option=='com_content' && $task='view'){
  $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";
}

mars 18 2009

Modifier la page d’accueil de Joomla

Tagged Under : , ,

Cette astuce fonctionne sur toutes les versions de Joomla.

Joomla affiche en « page d’accueil », la premier lien publié du menu appelé « main_menu ».

Par défaut, il s’agit d’une vue particulière du composant « com_content » qui va afficher une liste d’articles, à la manière d’un blog.

Pour mettre en page d’accueil, votre boutique VirtueMart, il vous suffit donc de placer en première position du menu main_menu, une entrée pointant vers une page du composant « virtuemart ».

Il n’est pas nécessaire qu’un module affichant le « mainmenu » ne soit publié. Ainsi, cette modification ne sera pas nécessairement visible dans les menus de navigation.

mars 13 2009

Rendre Virtuemart utilisable en mode offline

Tagged Under : , ,

Les dernières versions de VirtueMart font appel à des webservices convertisseurs de devises.

Ces webservices ne peuvent malheureusement pas à ma connaissance être désactivés.

De ce fait, lorsque l’on utilise VirtueMart en étant non connectés à Internet (pour développer ou faire une présentation), des messages d’erreurs peuvent s’afficher (ie : « Error: Failed to retrieve the Currency Converter XML document »).

Pour éviter ces désagréments, mais également éventuellement pour supprimer les appels à ces webservices qui peuvent être inutiles et ralentir inutilement le site, il faut créer un fichier dans le répertoire /administrator/components/com_virtuemart/classes/currency/

Appelez le par exemple « convertNOP.php ».

Voici le code source nécessaire :

<?php

if(

!defined( '_VALID_MOS' )

&&

!defined( '_JEXEC' ) )

die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );

class convertNOP {
  function convert( $amountA, $currA='', $currB='' ) {
    return $amountA;
  }
}

?>

Par la suite, il faut activer ce fichier en allant dans le back-office VirtueMart dans « Configuration » > « Configuration générale » > « Paramètres principaux » > « Sélectionner un module convertisseur de devises ».