Virtuemart et la personnalisation des messages

Appréciation moyenne:  / 15
Très mauvaisTrès bien 

Je souhaite personnaliser les messages virtuemart.

Une technique courante consiste à aller modifier directement les fichiers de langue de Virtuemart, dans la langue concernée.

Tout ça se passe dans:

/www/administrator/components/com_virtuemart/languages/

une arborescence complète assez intuitive par rapport à la localisation des messages que l'on souhaite modifier.

Bon, étudions un cas pratique, c'est plus parlant:

On va modifier le message lié au mini-panier, comme quoi 'votre panier est actuellement vide'

la technique complète de mise en place et d'adaptation d'un template pour vm est expliquée dans cet article:

Personnalisation complète du mini-panier

Repérons dans notre page /www/components/com_virtuemart/themes/default/templates/common/minicart.tpl.php 'PHPSHOP_EMPTY_CART' qui correspond à l'affichage au final d'un message comme celui-ci:
'Votre panier est actuellement vide.'

Dans le dossier /www/administrator/components/com_virtuemart/languages/ , après une petite recherche et un peu de logique, on retrouve dans le dossier common un fichier french.php qui contient la variable.

Je modifie le contenu de cette variable en 'votre panier est presque vide' et lorsque je teste sur le site mon message à moi apparait, bref c'est ok aussi.

Autre solution, en utilisant une nouvelle variable dans le code php du template (PHPSHOP_PANIER_VIDE) :

echo $VM_LANG->_('PHPSHOP_PANIER_VIDE')

puis en la créant aussi dans le bon fichier common/french.php, à la fin de préférence:

//ne pas oublier de rajouter une virgule après la dernière variable présente
 'PHPSHOP_PANIER_VIDE' => 'Votre panier est presque vide.'

ça fonctionne aussi.

Mais encore une fois, à la prochaine mise à jour de Virtuemart, cette modif sera surement écrasée.

L'idéal serait de pouvoir rajouter no(s)tre propre(s) fichier(s) qui contiendraient nos variables, et qui viendraient s'ajouter aux fichiers de langue par défaut de Virtuemart.


Je vais donc créer un nouveau répertoire sous /administrator/components/com_virtuemart/languages/ nommé par exemple 'custom' dans lequel je vais commencer par copier un fichier french.php et dans lequel je mettrai mes propres variables françaises.
Je vire toutes les autres variables pour ne conserver que ceci:
 

<?php
 if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); 
 /**
 *
 * mes chaines de messages
 *
 */
 global $VM_LANG;
 $langvars = array ( 
 'CHARSET' => 'UTF-8',
 'PHPSHOP_PANIER_VIDE' => 'Votre panier est presque vide.'
 ); $VM_LANG->initModule('custom', $langvars );
 ?>

 

Dans l'appel de la fonction initmodule en fin de fichier j'ai bien modifié le nom du 'répertoire' pour mettre le mien.

je teste et ça ne fonctionne pas.

C'était trop simple... j'ai bien cherché mais pour rajouter un dossier de module de langue c'est pas simple.

Il me reste à tester ça:

je crée un fichier.php dans la racine de mon template virtuemart contenant un tableau que je garnirai au fur et à mesure de mes variables messages.

Ensuite, dans le fichier theme.php au même endroit, j'inclus ce fichier.php en global et le tour est joué.

Si je veux gérer plusieurs langues, je crée un fichier par langue (french.php pour le français) et je teste dans le fichier theme.php quelle langue est utilisée par joomla pour la boutique.

Il faut se souvenir que virtuemart s'appuie sur la langue choisie dans joomla pour s'adapter au langage.
En d'autres termes, si on a choisi 'french' comme langue par défaut du site dans joomla, virtuemart va rechercher les fichiers french.php (orthographe exacte attention) dans ses dossiers de languages.

J'utilise donc le même système de sélection de langue, avec orthographe exacte donc...

à suivre pour les tests maintenant.

 En attendant, j'utilise la technique du début, à savoir que je modifie la variable langue appelée par la page pour laquelle je souhaite modifier le message.

Et je note toutes mes modifs en prévision des mises à jour Virtuemart...