ExpAt est extensible. La version actuelle possède un nombre minimal de fonctions/objets, mais elle s'enrichira au cours du temps.

Il reste toutefois possible dans la version actuelle du plugin, d'ajouter ses propres fonctions, via le _public.php de son thème ou d'un plugin donné.

L'approche générale est d'utiliser l'objet $core->expatDict, qui est le dictionnaire du plugin ExpAt

La déclaration d'une fonction est très simple, il suffit d'utiliser le behavior expatDictInit :

$core->addBehavior("expatDictInit",array("myExpat","expatDictInit"));
class myExpat {
  public static function expatDictInit($dict) {
    $dict->registerFunction(new expatBasicFunction("map_name","function"));
  }
}
  • map_name est le nom de la fonction tel qu'il devra être entré dans les expressions du template
  • function est le nom de la fonction généré dans le template compilé.

Exemple : en déclarant le code

$core->addBehavior("expatDictInit",array("myExpat","expatDictInit"));
function isSame($a,$b) {
 return $a==$b;
}

class myExpat {
  public static function expatDictInit($dict) {
    $dict->registerFunction(new expatBasicFunction("test","isSame"));
  }
}

Il devient alors possible de faire un test du type <tpl:If expr="test(entry.id,12)">...</tpl:if>. L'exemple choisi ici est idiot (on peut faire tout bêtement "entry.id==12"à, mais il montre les possibilité d'extension du plugin.

Il est également possible de définir de nouveaux objets, cela fera l'objet d'un nouveau billet...