Lors de développements de modules ou d’extensions pour le CMS ezPublish nous sommes souvent amenés a développer des classes php métiers (pour accéder aux données, réaliser des traitements particuliers, …).
Il peut devenir alors utile dans un template de vouloir manipuler une instance d’une classe métier et d’invoquer des méthodes php de cette classe. EzPublish fournit pour cela un mécanisme assez simple à mettre en oeuvre qui permet d’exposer des méthodes d’une classe php à un template.
Pour cela, la classe métier doit définir les trois méthodes suivantes :
- attributes
- attribute
- hasAttribute
Méthode attributes
Cette méthode permet de donner la liste de toutes les fonctions de la classe que le template peut invoquer sur l’instance de cette classe. En gros elle retour un tableau de chaines de caractère avec le nom des méthodes accessibles dans le template.
Elle ne prend pas de paramètre en entrée.
Méthode hasAttribute
Cette méthode permet de valider que la fonction invoqué sur l’instance de la classe dans le template existe bien.
Elle prend en entrée un paramètre de type chaine de caractère représentant la méthode à invoquer
Méthode attribute
Cette méthode fonctionne comme un hub en reroutant l’invocation de fonction depuis le template sur la bonne méthode de la classe.
Elle prend en entrée deux paramètres :
- une chaine de caractère représentant la méthode invoquée
- un booléen indiquant s’il s’agit d’une fonction invoqué ou un attribut de la classe
Voici un exemple de classe php implémentant ces méthodes :
class myClass{
public function __construct(){…}
public function sayHello(){
return “hello the world !!!”;
}
/**
* Retourne un tableau avec toutes les méthodes utilisables dans
* un template
*
* @return array liste des toutes les méthodes accessibles en template
*/
public function attributes(){
return array(’sayHello’);
}
/**
* Valide que la méthode appellée dans un template existe
*
* @return bool true si la fonction existe false sinon
*/
public function hasAttribute($attr){
return in_array($attr, array(’sayHello’));
}
/**
* Execute la méthode demandée dans un template
*
* @param string $attr
* @param bool $noFunction
*/
public function attribute($attr, $noFunction = false){
if($attr == ’sayHello’){
return $this->sayHello();
}
}
}
Maintenant dans un template auquel nous avons au préalable passé une instance de la classe myClass, nous pouvons invoquer la méthode sayHello de la manière suivante :
{$instance.sayHello}
VN:F [1.0.8_357]
Rating: 3.8/5 (5 votes cast)
developpement, ezPublish
ezPublish, php