Présentation
Copix possède un système vous permettant de gérer plus facilement vos ressources (feuilles de styles, images, javascripts ...).
Ce système est simple, quand vous voulez afficher une image, lier un fichier css, etc... Ne mettez pas son chemin en dur mais utilisez CopixResource?.
Exemple en PHP
<?php CopixUrl::getResource ("styles/styles_copix.css"); // ou la syntaxe racourcie _resource ("styles/styles_copix.css"); // retourne une chaine du type http://www.monsite.com/./themes/mon_theme/styles/styles_copix.css ?>
Exemple avec Smarty
Avec le tag copixresource :
{copixresource path="styles/styles_copix.css"}
Récupérer le chemin physique
CopixURL::getResource() renvoie une URL pour le chemin passé en paramètre. Mais vous pouvez avoir besoin du chemin physique uniquement depuis www, sans http://www.monsite.com/ devant. Dans ce cas, il faut utiliser CopixURL::getResourcePath() :
<?php CopixUrl::getResourcePath ('styles/styles_copix.css'); // ou la syntaxe raccourcie _resourcePath ('styles/styles_copix.css'); // retourne une chaine du type ./themes/mon_theme/styles/styles_copix.css // récupérer le chemin complet depuis la racine du disque dur getcwd () . '/' . _resourcePath ('styles/styles_copix.css'); // retourne une chaine du type /var/www/html/mon_site/www/./themes/mon_theme/styles/styles_copix.css ?>
Types de ressources
Il existe deux types de ressources.
Ressources globales
Ce sont les ressources "classiques", identifiées par un chemin simple : chemin/vers/maRessource.css
Ces ressources sont stockées dans le répertoire www/ est sont accessibles directement depuis le web (i.e. sans passer par du PHP).
Ressources de module
Elles sont identifiées par un chemin de la forme : monModule|chemin/vers/maRessource.css
Ces ressources sont stockées dans les sous-répertoires www/ des modules. Elles sont accessibles via une URL spéciale qui utilise le script resource.php.
A Noter : un traitement spécial est réservé aux ressources de module de type Javascript, CSS ou HTML. Afin de pouvoir faire facilement des références à d'autres ressources dans ces fichiers, vous pouvez y utiliser un tag {copixresource path="chemin/vers/uneAutreRessource.css"}, qui sera évalué comme le tag copixresource de Smarty.
Par exemple, imaginez l'arborescence suivante :
- monModule/
- www/
- styles/
- monStyle.css
- img/
- monBackground.png
- autreImage.png
- styles/
- www/
La feuille de style peut être référencées par _resource('monModule|styles/monStyle.css'). Imaginez que dans cette feuille de style, vous voulez utiliser monBackground.png comme image de fond sur les balises ayant la classe CSS "maClasse". Vous pouvez le faire facilement avec le {copixresource} :
.maClasse { background-image: url({copixresource path='monModule|img/monBackground.png'}); }
Point important, Smarty n'est absolument pas utilisé pour faire cette substitution. Ce serait bien trop lourd. Une simple expression régulière fait le travail. Donc aucune des fonctionnalités de Smarty ne sont disponbiles.
Ordre de résolution des ressources
Lorsque vous demandez une ressource avec _resource() ou _resourcePath(), une recherche du fichier est effectuée dans différents répertoires. Plusieurs paramètres et configurations différents vont se combiner pour déterminer l'ordre de recherche et le nom des fichiers recherchés.
La règle appliquée est celle du "first-match" : la recherche s'arrête au premier fichier trouvé.
Paramètres de résolution
Thème
La résolution tient compte du thème en cours. Par exemple pour une ressource chemin/vers/maRessource.css, l'ordre de résolution est :
- si le thème n'est pas "default": www/themes/nomDuTheme/chemin/vers/maRessource.css
- www/themes/default/chemin/vers/maRessource.css
- www/chemin/vers/maRessource.css
I18N
En définissant la propriété CopixConfig::instance()->i18n_path_enabled à vrai, la recherche de ressources internationalisées est activée.
Dans ce cas, l'ordre de résolution tient compte des valeurs de CopixI18N::getLang() et CopixI18N::getCountry(). Pour chaque répertoire testé, deux sous-répertoires sont testés en premier lieu s'ils existent. L'ordre de résolution est :
- chemin/vers/lang_country/maResource.css
- chemin/vers/lang/maResource.css
- chemin/vers/maResource.css
Répertoires de ressources supplémentaires
En utilisant CopixConfig::instance()->copixresource_addDirectory(), il est possible d'indiquer des sous-répertoires de www/ dans lesquels se trouvent des ressources. Ces répertoires sont vérifiés dans l'ordre d'ajout dans liste. En outre, la racine est toujours vérifiée en premier.
L'intérêt de ce système est, par exemple, de placer une copie du répertoire www/ distribué avec Copix3 dans un sous-répertoire et de placer les ressources propres à votre projet à la racine du www/.
Exemple de résolutions
Pour cette exemple, prenons le contexte suivant :
- thème : automne,
- internationalisation des ressources : activée,
- langue : fr (français)
- pays : FR (France).
- répertoires supplémentaires : commons/.
Pour une ressource globale chemin/vers/maRessource.css, l'ordre de résolution est:
- themes/automne/chemin/vers/fr_FR/maRessource.css
- themes/automne/chemin/vers/fr/maRessource.css
- themes/automne/chemin/vers/maRessource.css
- commons/themes/automne/chemin/vers/fr_FR/maRessource.css
- commons/themes/automne/chemin/vers/fr/maRessource.css
- commons/themes/automne/chemin/vers/maRessource.css
- themes/default/chemin/vers/fr_FR/maRessource.css
- themes/default/chemin/vers/fr/maRessource.css
- themes/default/chemin/vers/maRessource.css
- commons/themes/default/automne/chemin/vers/fr_FR/maRessource.css
- commons/themes/default/automne/chemin/vers/fr/maRessource.css
- commons/themes/default/automne/chemin/vers/maRessource.css
- chemin/vers/fr_FR/maRessource.css
- chemin/vers/fr/maRessource.css
- chemin/vers/maRessource.css
- commons/chemin/vers/fr_FR/maRessource.css
- commons/chemin/vers/fr/maRessource.css
- commons/chemin/vers/maRessource.css
Pour une ressource de module monModule|chemin/vers/maRessource.css, l'ordre de résolution est:
- themes/automne/modules/monModule/chemin/vers/fr_FR/maRessource.css
- themes/automne/modules/monModule/chemin/vers/fr/maRessource.css
- themes/automne/modules/monModule/chemin/vers/maRessource.css
- commons/themes/automne/modules/monModule/chemin/vers/fr_FR/maRessource.css
- commons/themes/automne/modules/monModule/chemin/vers/fr/maRessource.css
- commons/themes/automne/modules/monModule/chemin/vers/maRessource.css
- cheminDeMonModule/www/chemin/vers/fr_FR/maRessource.css
- cheminDeMonModule/www/chemin/vers/fr/maRessource.css
- cheminDeMonModule/www/chemin/vers/maRessource.css
Dans les trois derniers cas, comme le répertoire cheminDeMonModule/www/ n'est pas accessible direcement depuis le web, le script resource.php est utilisée pour récupérer le contenu de la ressource.
