Récupérer dynamiquement les chemins d'accès aux différents composants

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

Voici les variables et les fonctions intégéres à Joomla qui vont me permettre de récupérer dynamiquement (donc de ne pas écrire en dur) les chemins d'accès aux différents éléments d'un site web monté avec Joomla:

 

Tout d'abord, lorsqu'on développe un thème, ou que l'on retouche le code php de Joomla, il est très important d'éviter au maximum d'entrer des chemins d'accès en dur dans le code.

Toutes les adresses doivent être en absolue et construites à l'aide des fonctions et vaiables Joomla.

Sinon, quelques bizarreries peuvent apparaitre si l'on utilise ensuite l'url rewriting.

 

Voici déjà des fonctions de base:

JURI::root()

Méthode retournant l'URI racine du site en cours.

Exemple, mon site Joomla est situé à la racine de mon hébergement web, http://www.monsite.toto, le requête JURI::root()  me retourne:
http://www.monsite.fr/
notez le slash / à la fin de l'adresse, rajouté justement par la fonction.
Si maintenant mon site joomla est situé dans un dossier sur mon espace hébergé, par exemple dans joomla, le même appel à la fonction va me retourner:
http://www.monsite.fr/joomla
et ici remarquez l'abscence de /
Normal, puisque la fonction renvoie le dossier racine du site joomla, et que / est le dossier racine si joomla n'est pas installé dans un sous-dossier.

Il est préférable d'utiliser cette fonction avec l'option true, car elle renvoie toujours un antislash à la fin, voilà pourquoi:

Joomla est installé à la racine du site.
Je veux accéder à un dossier toto, je fais:

JURI::root().'toto'; 

L'adresse retournée est:

http://www.monsite.fr/toto

Joomla est installé dans le dossier joomla, pour la même manip, le retour sera:

http://www.monsite.fr/joomlatoto

il manque le slash.

L'option true rajoute toujours un slash à la fin s'il n'y est pas déjà.
Le retour devient:

/toto/joomla/

Notez que l'on perd au passage l'adresse du site, normal avec l'option true.

Il existe d'autres options à cette fonction que je vous laisse étudier ici:

La fonction JURI::root() expliquée par les développeurs Joomla

Notez au passage que la fonction JURI::base() fait la même chose


JRoute::_(un_lien_ou_une_adresse)

cette fonction me sert à "router" les liens  que je crée via php en dynamique.
Router, c'est demander à Joomla de les "construire". En général, si on construit soi-même un lien, il ne fait rien d'autre que de le prendre en compte et renvoyer le lien.
Mais, là où c'est important, c'est que ce lien devient visible pour les autres modules Joomla, et notamment l'url rewriting qui prendra en compte ce lien pour le réécrire corectement.
il faut se souvenir que tous les liens doivent passer par JRoute pour être conformes à Joomla.

Plus d'infos ici:

La fonction JRoute expliquée par les développeurs Joomla

 


Récupérer le nom du template en cours:

$mainframe->getTemplate();

renvoie le nom du template utilisé.
Combiné comme ça, on a l'adresse complète:

JURI::root(true).'templates/'. $mainframe->getTemplate();

Récupérer l'objet document en cours:

 

$Doc = & JFactory::getDocument(); // récup doc en cour
//et lui assigner une feuille de style, façon joomla
$Doc->addStyleSheet(JURI::root(true).'chemincompletdufichiercss.css')
 //et façon Virtuemart: 
$Doc->addStyleSheet(VM_THEMEURL.'browse_notable.css'); //ici on met juste le nom du fichier s'il est dans le dossier racine du thème du composant virtuemart

 

 

voilà, c'est tout pour le moment.