Bonjour,
je souhaitais avoir une sorte de template virtuel qui redirige vers un autre template, ceci afin de changer facilement de template sur un groupe de documents.
Voici ma solution (à peaufiner) :
je crée un nouvel événement OnSelectTemplate dans document.parser :
if(!$this->documentObject['template']) $this->documentContent = "[*content*]"; // use blank template
else {
$this->invokeEvent("OnSelectTemplate");...
Puis je le signale dans la table system.eventnames.
Je crée ensuite le plugin qui va réagir à cet événement :
$sql = "SELECT * FROM ".$this->getFullTableName("site_templates")." WHERE ".$this->getFullTableName("site_templates").".id = '".$this->documentObject['template']."';";
$result = $this->dbQuery($sql);
$rowCount = $this->recordCount($result);
if($rowCount>1) {
$this->messageQuit("Incorrect number of templates returned from database", $sql);
}
elseif($rowCount==1) {
$row = $this->fetchRow($result);
$temp=$row['content'];
if(strpos($temp,'[[redirect')>-1){
$matches=array();
if(preg_match_all('~\[\[redirect\s*(\d+)\s*\]\]~',$temp,$matches)){
$this->documentObject['template'] = $matches[1][0];
}
}
}
que j’appelle par exemple templateVirtual.
Ensuite pour essayer tout ceci, je crée un template contenant :
et je suis automatiquement redirigé vers le template 5.
TODO : gérer les possibles boucles infinies, les erreurs lors de la sélection du template,...
Remarque sur OnSelectTemplate : j’avais besoin du documentOject, qui n’apparaît qu’après OnWebPageInit, et OnLoadWebDocument vient trop tard car le template est déjà mis dans documentContent.