Invoquer des méthodes d’un objet métier dans un template ezPublish
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 :
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 :














Article très intéressant. Petite remarque, c’est sous entendu dans le principe des templates, mais il faut quand même noter que le but est de lire une donnée dans un objet pour la formater, donc la méthode sous-jacente appelée par ce biais ne devrait en aucun cas faire un quelconque traitement, ce n’est pas le but et en plus avec la gestion des caches, ça risque de ne pas avoir l’effet attendu
Sinon, j’ai pas trouvé de formulaire de contact ou de mail, donc je profite de ce commentaire pour faire un peu de publicité pour le Planet eZ Publish.fr [1] que je viens de lancer où le flux RSS de ta catégorie eZ Publish aurait tout à fait sa place !
[1] http://www.planet-ezpublish.fr/
Bienvenue sur notre humble plateforme blogcity.fr monsieur Pobel.
Je suis un fan de pwet.fr