Chaque widget Pxxo se veut indépendant et même extérieur à l'application qui l'utilise. Or, un widget utilise en plus de son template, des fichiers annexes comme des images, des feuilles de styles (CSS), des scripts (Javascript). Tout ceci représente les ressources du widget.
Les ressources sont stockées dans le répertoire de thèmes du widget. Elle sont de 2 types :
Toutes les ressources dynamiques sont considérées comme des fichiers “templates”. Par convention le nom du fichier est suffixé par le type du contenu à produire précédé de .php, exemple : index.php.html, style.php.css, script.php.js.
Qu'elles soient dynamiques ou statiques toutes les ressources sont générées ou recopiées dans le répertoire des ressources (par convention nommé rsc). C'est ce répertoire, qui sera public, qui est accessible par les navigateurs web.
Le moteur de template est depuis Pxxo 5, celui du Zend Framework à savoir Zend_View.
Tous les helpers fournit par Zend_View sont théoriquement utilisables dans les templates.
La variable Self est disponible dans les templates : elle donne accès à l'instance de la classe ayant exécuté le template.
Exemple :
Objet : <?php class Exemple Pxxo_Widget { function __construct() { parent::Pxxo_Widget(array(), __FILE__); $this->setTemplateRaw('defaut', '----'); } function defaut() { // ... } function ma_fonction() { return 'OK'; } } ?> Template : defaut.php.html <?php echo $this->Self->ma_fonction(); ?>
On peut trier les ressources via un poids. Cela est utile notamment pour les fichiers javascript qui doivent être chargés dans un ordre donné. La ressource à laquelle on associe le plus gros poids est chargée en premier.
Exemple :
$id = $this->putScript('second.php.js'); $this->Resources->get($id)->setWeight(3000); $id = $this->putScript('premier.php.js'); $this->Resources->get($id)->setWeight(4000);
Les ressources de type CSS ou Javascript peuvent regroupées en un seul fichier. Cela permet d'améliorer nettement les performances.
Le groupement de ressources est actif si :
P_M_COMBINE (anciennement la variable StripSpacesMode était utilisée)
Il est parfois nécessaire de connaître en détail les caractéristiques des ressources d'un widget (js,css). Une information importante pour les identifier est le nom du fichier utilisé pour générer la ressource. Cette information peut être récupérée avec la méthode getFilename() dont voici un exemple d'utilisation :
$prototype_js_url = "/"; foreach($this->Resources as $r) { if ($r->getFilename() == 'prototype.js') { $prototype_js_url = $r->get(); break; } }
Ce code va rechercher l'url de la ressource du widget $this dont le nom de fichier est prototype.js.