Comme indiqué sur la page officielle de téléchargement de Joomla, le support de la branche 2.5 devrait s'arrêter à la fin de l'année 2014. La mise à jour de Joomla fonctionne correctement depuis l'administration, mais qu'en est-il des extensions tierces que vous avez installé / développé sur votre site ?
La plupart des (bonnes) extensions utilisent le processus de mise à jour standard de Joomla, qui vous permet d'être averti et d'appliquer un « update » directement depuis votre panneau d'administration. Quand les développeurs prennent le soin de proposer ce type d'assistance, ils ont généralement fait le nécessaire pour que leur extension soit compatible à la fois pour Joomla 2.5 et pour Joomla 3.x.
Cependant, ce n'est pas toujours le cas, et il est également possible qu'une extension de votre site ai été développée spécialement pour vous, ou bien qu'elle ne soit plus maintenue par son créateur (ou bien encore que vous n'ayez pas appliqué les mises à jour quand elles étaient disponibles...). Dans ces cas-là, c'est à vous de faire quelques correctifs pour que votre site reste fonctionnel.
Le but de cet article est de lister les modifications à réaliser (dans le code) pour rendre une extension (composant, plugin, module, template) Joomla 2.5 compatible avec Joomla 3.x. Nous compléterons cette liste suivant les problèmes constatés et les solutions proposées.
La constante DS
Très utilisée depuis les débuts de Joomla, la constante « DS » permettait d'écrire un chemin vers un fichier ou vers un répertoire tout en étant compatible avec les systèmes Linux et Windows. En effet, pour ces deux systèmes, le caractère qui indique l'arborescence des répertoires est différent. Ainsi, pour cibler un fichier « file.txt » dans un répertoire « directory », on devait déclarer :
- Sous Linux : "directory/file.txt"
- Sous Windows : "directory\file.txt"
- Dans Joomla : "directory".DS."file.txt"
Depuis, PHP est devenu plus "intelligent", et sait maintenant cibler correctement un répertoire ou un fichier (pour les 2 systèmes), du moment que l'on utilise le format Linux. La constante DS a donc été retirée de Joomla, étant donnée qu'elle n'était plus utile.
Dans l'exemple ci-dessus, vous avez un chemin avec l'ancien format conseillé par Joomla, vous devez maintenant vous calquer sur le format Linux.
Les classes obsolètes
Dès Joomla 2.5, certaines classes PHP (qui aident au développement et à la structure des extensions) ont été retravaillées pour proposer une base plus solide, plus flexible. C'est le cas par exemple de la classe JController, qui est le point d'entrée des composants Joomla.
Dans un premier temps, les modifications ont été appliquées en douceur pour ne pas poser trop de problèmes aux webmasters, et des annotations (les classes étaient alors marquées comme dépréciées) permettaient aux développeurs de repérer les changements à venir pour adapter le code d'ici la sortie de Joomla 3 (moment à partir duquel les classes deviennent obsolètes et remplacées par des interfaces).
- JController devient JControllerLegacy
- JView devient JViewLegacy
- JModel devient JModelLegacy
Le cas JRequest
La classe JRequest était utilisée pour récupérer des paramètres $_GET ou $_POST. Elle a été remplacée par la classe JInput qui a un fonctionnement non-statique.
- JRequest::getInt($var) devient JFactory::getApplication()->input->get($var, 0, 'INT')
- JRequest::getString($var) devient JFactory::getApplication()->input->get($var, '', 'STRING')
- JRequest::getVar($var, .... , 'ARRAY') devient JFactory::getApplication()->input->get($var, $default_value, 'ARRAY')
- JRequest::getVar($var, .... , 'RAW') devient JFactory::getApplication()->input->get($var, $default_value, 'RAW')
Les fonctions qui ont changé de nom
Certaines fonctions utilitaires ont changé de nom pour les rendre plus cohérentes. C'est par exemple le cas de la fonction nameQuote (Joomla 2.5) qui permet d'encadrer un nom de table avec des apostrophes particulières.
- $db->nameQuote( ... ) devient $db->quoteName( ... )
N'hésitez pas à nous proposer d'autres changements à prévoir entre Joomla 2.5 et 3, ou nous soumettre vos problèmes via les commentaires ci-dessous.
A noter : les changements importants sont décrits sur cette page (en anglais).