Mercurial > defr > DualBlog
diff includes/class.skeleton.php @ 32:4cea8b128fdd
Possibilité de choisir des templates différents en fonction du type de sortie.
Le fichier templates.conf permet d'associer à chaque type de sortie
(correspondant à une section du fichier INI) des templates pour le squelette,
les posts et les commentaires.
Il est possible de définir virtuellement
une infinité de type de sorties différents, pour le moment seul de quoi
obtenir un flux Atom a été ajouté.
Pour changer le type de sortie, il faut passer en GET au script appellant
un paramètre outputType. Si le paramètre reçu ne correspondant à aucun
des types de sorties définis dans templates.conf, alors on prend du
xhtml par défaut.
author | Franck Deroche <webmaster@defr.org> |
---|---|
date | Mon, 05 Nov 2007 09:06:46 +0100 |
parents | 710fe2fd2ff7 |
children | e776701841ba |
line wrap: on
line diff
--- a/includes/class.skeleton.php Mon Nov 05 08:59:51 2007 +0100 +++ b/includes/class.skeleton.php Mon Nov 05 09:06:46 2007 +0100 @@ -8,8 +8,15 @@ private $calendarYear; private $useXML; + const OUTPUT_XHTML = 'xhtml'; + const OUTPUT_ATOM = 'atom'; + const OUTPUT_RSS = 'rss'; + + private static $outputType = OUTPUT_XHTML; + private static $templates = array(); + public function __construct() { - parent::__construct('main.xml'); + parent::__construct(Skeleton::getTemplateFile('skeleton')); parent::shouldStripAttributesInTemplateNS(true); $this->styleSheets = array(); $this->addDefaultSheets(); @@ -216,5 +223,33 @@ $returnValue = ereg_replace('<\?xml[^\?]*\?>', '', $returnValue); return $returnValue; } + + public static function getTemplateFile($type) { + if(count(Skeleton::$templates) == 0) { + // Construction du tableau des différents templates + // permettant de répondre au "type" de sortie demandé + $iniFile = parse_ini_file('templates.conf', true); + + $format = Factory::getRequete() + ->get('outputType', null, Skeleton::OUTPUT_XHTML); + + if(array_key_exists($format, $iniFile)) { + Skeleton::$templates = $iniFile[$format]; + Skeleton::$outputType = $format; + } else { + Skeleton::$templates = $iniFile[Skeleton::OUTPUT_XHTML]; + Skeleton::$outputType = Skeleton::OUTPUT_XHTML; + } + } + return Skeleton::$templates[$type]; + } + + public static function getOutputType() { + // On s'assure que la demande a été analysée, si ce n'est pas + // le cas on le fait maintenant, en demandant un template + if(count(Skeleton::$templates) == 0) + Skeleton::getTemplateFile('skeleton'); + return Skeleton::$outputType; + } } ?>