Introduction
Les Zones dans Copix sont des objets dont l'objectif est de prendre en charge une partie d'écran, simple et autonome qui peuvent être réutilisés dans un module, dans un même projet ou même dans un autre projet.
On peut vouloir faire des zones pour créer des composants graphiques réutilisables, que l'on utilisera un peu partout dans un site (exemples: Un zone de login, une zone de recherche, une zone des dernières nouvelles, une zone de syndication, ....)
Les zones peuvent nativement tirer parti du cache.
Classes & Emplacement
Les zones héritent de CopixZone, elles sont stockées dans des fichiers nomzone.zone.php dans les répertoires zones des modules et se nomment ZoneNom?
Exemple
//dans le fichier zones/exemple.zone.php class ZoneExemple extends CopixZone { function _createContent (&$toReturn){ $toReturn = 'Contenu de ma zone'; return true; } }
La propriété _useCache
Cette propriété, de type boolean, permet d'indiquer si la zone va utiliser un cache ou pas. Si elle est à true, et que le cache n'existe pas (premier passage dans cette zone ou premier passage après avoir vider les fichiers temporaires), _createContent génèrera le cache ; sinon si le cache existe il est directement renvoyé par _createContent.
La méthode _beforeProcess (Copix supérieur à 3.0.3)
Cette fonction est appelée avant la fonction _createContent. Elle peut être utilisée pour définir l'utilisation du cache ($this->_useCache) ou non, ou pour générer des statistiques d'affichage de la zone, par exemple.
La méthode _createContent (&$pContent)
La fonction "_createContent" est en charge de la génération du contenu de la zone. Elle reçoit en paramètre une chaîne de caractères (par référence) dont elle à la charge de remplir le contenu.
Ce contenu sera plus tard affiché là où la zone est appelée.
La fonction _createContent doit retourner un booléen qui indique si la génération du contenu s'est bien passée. Ce paramètre est important car les données ne seront mises en cache que si la fonction _createContent retourne "true".
La méthode _afterProcess (&$pContent) (Copix supérieur à 3.0.3)
Cette fonction est appelée après _createContent, et offre la possibilité de modifier le contenu renvoyé par la zone. Elle prend comme paramètre $pContent, passé par référence, et retourne soit null si elle ne veut pas modifier le contenu, soit le nouveau contenu. Si le cache est activé ($this->_useCache à true) et que _afterProcess a retourné un nouveau contenu, le cache est regénéré.
Zone & Paramètres
Il est possible de passer des paramètres à une zone. Ces paramètres seront récupérés dans la zone via la méthode $this->getParam ().
Exemple
class ZoneExempleParam extends CopixZone { function _createContent (&$toReturn){ $toReturn = 'La valeur du paramètre PARAM est '.$this->getParam ('PARAM'); return true; } }
Note : Il est possible de donner une valeur par défaut aux paramètres si jamais l'appelant ne les spécifie pas, par exemple :
class ZoneExempleParam extends CopixZone { function _createContent (&$toReturn){ $toReturn = 'La valeur du paramètre PARAM est '.$this->getParam ('PARAM', 'Si paramètre non donné'); return true; } }
Appel des zones
depuis un code PHP
$contenuObtenu = CopixZone::process ('mon_module|Exemple');//appel de la zone ZoneExemple dans mon_module/zones/exemple.zone.php //avec des paramètres $contenuObtenu = CopixZone::process ('module|NOM_ZONE', array ('PARAM'=>'Valeur du paramètre'));//appel de la zone ZoneExempleParam dans mon_module/zones/exemple.zone.php avec un paramètre PARAM
depuis un template Smarty
{copixzone process=exemple} {copixzone process=exempleparam PARAM="Valeur du paramètre PARAM"}Exemple concret, ZoneEphemeride?
Par exemple, dans un module, vous avez une partie de l'affichage qui affiche la date et le saint du jour. Cette partie est typiquement une zone. Elle ne sert qu'à l'affichage et n'effectue pas elle même de traitements lourds.
Le code de la zone
class ZoneEphemeride extends CopixZone { function _createContent (& $toReturn) { $tpl = new CopixTpl (); $date = getdate(); $jours = array("dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"); $mois = array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"); $tpl->assign('DATE', $jours[$date["wday"]]." ".$date["mday"]." ".$mois[$date["mon"]-1]." ".$date["year"]); $tpl->assign('SAINT', getTodaysSaint()); $toReturn = $tpl->fetch('navigation.tpl'); return true; } private function getTodaysSaint() { // on regarde le saint du jour et on le retourne return TodaysSaint; } }
Le code du template navigation.tpl
{$DATE}
{$SAINT}
Voir aussi
- CopixHTMLHeader Qui vous permettra de demander à Copix d'injecter des contenus javascript ou CSS nécessaires à la zone dans le template principal.
