annotate includes/class.skeleton.php @ 11:ff57b45eda37

Changement profond de l'index. Utilisation des templates. Dual Blog utilise maintenant intimement la libraire de templates que l'on peut trouver sur http://hg.defr.org/defr/templates, ce qui permet d'eviter de mixer du code PHP avec du HTML. Accessoirement, on est aussi assurer d'avoir du XML valide, puisque c'est l'API DOM qui est utilisée pour générer la sortie.
author Franck Deroche <webmaster@defr.org>
date Wed, 24 Oct 2007 20:06:00 +0200
parents
children ec1453cb74b8
rev   line source
webmaster@11 1 <?php
webmaster@11 2 class Skeleton extends Template {
webmaster@11 3
webmaster@11 4 private $styleSheets;
webmaster@11 5 private $blogPosts;
webmaster@11 6 private $showCalendar = false;
webmaster@11 7 private $calendarMonth;
webmaster@11 8 private $calendarYear;
webmaster@11 9
webmaster@11 10 public function __construct() {
webmaster@11 11 parent::__construct('main.xml');
webmaster@11 12 $this->styleSheets = array();
webmaster@11 13 $this->addDefaultSheets();
webmaster@11 14 $this->blogPosts = array();
webmaster@11 15 }
webmaster@11 16
webmaster@11 17 public function setTitle($titre) {
webmaster@11 18 $this->setParams(array('title' => $titre));
webmaster@11 19 }
webmaster@11 20
webmaster@11 21 private function buildSidebar() {
webmaster@11 22 $sidebar = new Template('sidebar.xml');
webmaster@11 23 // 1. Récupération des archives
webmaster@11 24 $db = Factory::getDB();
webmaster@11 25 $db->Query("
webmaster@11 26 SELECT
webmaster@11 27 MONTH(DatePost) As Month,
webmaster@11 28 YEAR(DatePost) As Year,
webmaster@11 29 COUNT(num_mess) As Nb
webmaster@11 30 FROM Mess
webmaster@11 31 GROUP BY
webmaster@11 32 MONTH(DatePost),
webmaster@11 33 YEAR(DatePost)
webmaster@11 34 ORDER BY
webmaster@11 35 YEAR(DatePost) DESC,
webmaster@11 36 Month(DatePost) DESC
webmaster@11 37 ");
webmaster@11 38 $archives = array();
webmaster@11 39 while($row = $db->GetRow()) {
webmaster@11 40 $curArchiveTpl = new Template('archive.xml');
webmaster@11 41 $monthName = TextUtils::getMonthName($row['Month']);
webmaster@11 42 $curArchiveTpl->setParams(array(
webmaster@11 43 'a' => $monthName . ' ' . $row['Year'],
webmaster@11 44 'a@href' => "http://defr.org/blog/posts/{$row['Year']}/{$row['Month']}",
webmaster@11 45 'postCount' => '(' . $row['Nb'] . ')'
webmaster@11 46 ));
webmaster@11 47 $archives[] = array('li' => $curArchiveTpl);
webmaster@11 48 }
webmaster@11 49 // 2. Récupération des derniers commentaires
webmaster@11 50 $db->Query("
webmaster@11 51 SELECT C.*, M.Titre
webmaster@11 52 FROM Commentaires C, Mess M
webmaster@11 53 WHERE C.MessId = M.num_mess AND C.Visible=1
webmaster@11 54 ORDER BY num_comm DESC LIMIT 20");
webmaster@11 55 $i = 0;
webmaster@11 56 $comments = array();
webmaster@11 57 while($row = $db->GetRow()) {
webmaster@11 58 $curCommentTpl = new Template('commentIndex.xml');
webmaster@11 59 // On récupère une version filtrée du titre du post ...
webmaster@11 60 $tf = TextUtils::StripTitle($row['Titre']);
webmaster@11 61 // ... Qui nous permet d'obtenir l'adresse du commentaire sur le post
webmaster@11 62 $c_url = "/blog/post/{$row['MessId']}-$tf#c{$row['num_comm']}";
webmaster@11 63 // Si jamais on a une adresse mail, on rajoute un mailto:
webmaster@11 64 if(strpos($row['Adresse'], '@') !== false)
webmaster@11 65 $row['Adresse'] = 'mailto:' . $row['Adresse'];
webmaster@11 66 // On commence par définir les paramètres généraux
webmaster@11 67 $params = array(
webmaster@11 68 '#CommentAuthor' => $row['Auteur'],
webmaster@11 69 '#CommentAuthor@href' => $row['Adresse'],
webmaster@11 70 '#Post' => $row['Titre'],
webmaster@11 71 '#Post@href' => $c_url
webmaster@11 72 );
webmaster@11 73 // On affiche les 5 commentaires les plus récents en version complète
webmaster@11 74 // puis les 15 autres en versions résumées
webmaster@11 75 if($i < 5) {
webmaster@11 76 $Comment = nl2br($row['Comment']);
webmaster@11 77 }
webmaster@11 78 else {
webmaster@11 79 $Comment = str_replace("\n", " ", strip_tags($row['Comment']));
webmaster@11 80 if(strlen($Comment > 100))
webmaster@11 81 $Comment = utf8_encode(substr(utf8_decode($Comment), 0, 97)) . "...";
webmaster@11 82 $params['li@class'] = 'fold';
webmaster@11 83 }
webmaster@11 84
webmaster@11 85 $frag = $curCommentTpl->getDocumentFragment();
webmaster@11 86 $frag->appendXML($Comment);
webmaster@11 87 $params['comment'] = $frag;
webmaster@11 88 $curCommentTpl->setParams($params);
webmaster@11 89 $comments[] = array('blogComment' => $curCommentTpl);
webmaster@11 90 $i++;
webmaster@11 91 }
webmaster@11 92 // 3. Application des paramètres
webmaster@11 93 $sidebar->setParams(array(
webmaster@11 94 '#archives' => $archives,
webmaster@11 95 '#BlogCommentIndex' => $comments
webmaster@11 96 ));
webmaster@11 97 return $sidebar;
webmaster@11 98 }
webmaster@11 99
webmaster@11 100 private function buildLinks() {
webmaster@11 101 $links = new Template('links.xml');
webmaster@11 102 return $links;
webmaster@11 103 }
webmaster@11 104
webmaster@11 105 private function buildCalendar() {
webmaster@11 106 $retVal = null;
webmaster@11 107 if($this->showCalendar) {
webmaster@11 108 $cMonth = $this->calendarMonth;
webmaster@11 109 $cYear = $this->calendarYear;
webmaster@11 110 $nextMonth = ($cMonth % 12) + 1;
webmaster@11 111 $nextYear = ($nextMonth == 1) ? $cYear + 1 : $cYear;
webmaster@11 112 $prevMonth = (($cMonth % 12) - 1) % 12;
webmaster@11 113 $prevYear = ($prevMonth == 12) ? $cYear - 1 : $cYear;
webmaster@11 114 $retVal = new Template('calendar.xml');
webmaster@11 115 $retVal->setParams(array(
webmaster@11 116 '#calPrev' => TextUtils::getMonthName($prevMonth) . ' ' . $prevYear,
webmaster@11 117 '#calPrev@href' => '/blog/posts/' . $prevYear . '/' . $prevMonth,
webmaster@11 118 '#calNext' => TextUtils::getMonthName($nextMonth) . ' ' . $nextYear,
webmaster@11 119 '#calNext@href' => '/blog/posts/' . $nextYear . '/' . $nextMonth,
webmaster@11 120 'currentMonth' => TextUtils::getMonthName($cMonth) . ' ' . $cYear
webmaster@11 121 ));
webmaster@11 122 } else {
webmaster@11 123 $retVal = '';
webmaster@11 124 }
webmaster@11 125 return $retVal;
webmaster@11 126 }
webmaster@11 127
webmaster@11 128 public function addStyleSheet($SheetName, $CSSFile, $enabled = false) {
webmaster@11 129 $this->styleSheets[] = (object)array(
webmaster@11 130 'name' => $SheetName,
webmaster@11 131 'CSSFile' => $CSSFile,
webmaster@11 132 'enabled' => $enabled
webmaster@11 133 );
webmaster@11 134 }
webmaster@11 135
webmaster@11 136 public function enableStyleSheet($styleSheetName) {
webmaster@11 137 foreach($this->styleSheets as $styleSheet) {
webmaster@11 138 $styleSheet->enabled = ($styleSheet->name == $styleSheetName);
webmaster@11 139 }
webmaster@11 140 }
webmaster@11 141
webmaster@11 142 public function addDefaultSheets() {
webmaster@11 143 $StyleSheets = array(
webmaster@11 144 "Somatic" => "Somatic.css",
webmaster@11 145 "OliveVerde" => "OliveVerde.css",
webmaster@11 146 "Lite:Reloaded" => "Lite_nv.css",
webmaster@11 147 "Brushed" => "Brushed.css",
webmaster@11 148 ":Hover" => "HoverExp.css");
webmaster@11 149 $CkStyle = (array_key_exists("style", $_COOKIE) &&
webmaster@11 150 array_key_exists($_COOKIE['style'], $StyleSheets))
webmaster@11 151 ? $_COOKIE['style']
webmaster@11 152 :"Somatic";
webmaster@11 153 foreach($StyleSheets as $SheetName => $CSSFile)
webmaster@11 154 $this->addStyleSheet($SheetName, $CSSFile, ($SheetName == $CkStyle));
webmaster@11 155 }
webmaster@11 156
webmaster@11 157 public function addBlogPost(Template $blogPost) {
webmaster@11 158 $this->blogPosts[] = $blogPost;
webmaster@11 159 }
webmaster@11 160
webmaster@11 161 public function showCalendar($newValue = false) {
webmaster@11 162 $this->showCalendar = $newValue;
webmaster@11 163 }
webmaster@11 164
webmaster@11 165 public function setCalendarMonth($month, $year) {
webmaster@11 166 $this->calendarMonth = $month;
webmaster@11 167 $this->calendarYear = $year;
webmaster@11 168 }
webmaster@11 169
webmaster@11 170 private function prepareOutput() {
webmaster@11 171 $params = array();
webmaster@11 172
webmaster@11 173 // Ajout de la sidebar
webmaster@11 174 $params['sidebar'] = $this->buildSideBar();
webmaster@11 175
webmaster@11 176 // Ajout de la liste des liens
webmaster@11 177 $params['links'] = $this->buildLinks();
webmaster@11 178
webmaster@11 179 // Ajout des feuilles de style
webmaster@11 180 $params['possibleStyleSheets'] = array();
webmaster@11 181 foreach($this->styleSheets as $styleSheet) {
webmaster@11 182 $type = ($styleSheet->enabled) ? "" : "Alternate ";
webmaster@11 183 $type .= "StyleSheet";
webmaster@11 184 $params['possibleStyleSheets'][] = array(
webmaster@11 185 'link@href' => '/blog/css/' . $styleSheet->CSSFile,
webmaster@11 186 'link@rel' => $type,
webmaster@11 187 'link@title' => $styleSheet->name
webmaster@11 188 );
webmaster@11 189 }
webmaster@11 190
webmaster@11 191 // Affichage éventuel des liens vers les mois précédents et suivants
webmaster@11 192 $params['calendarPrevNext'] = $this->buildCalendar();
webmaster@11 193
webmaster@11 194 // Ajout des posts de blog
webmaster@11 195 $params['#Posts'] = array();
webmaster@11 196 foreach($this->blogPosts as $blogPost) {
webmaster@11 197 $params['#Posts'][] = array('post' => $blogPost);
webmaster@11 198 }
webmaster@11 199
webmaster@11 200 // Application des l'ensemble de ces paramètres
webmaster@11 201 $this->setParams($params);
webmaster@11 202 }
webmaster@11 203
webmaster@11 204 public function __toString() {
webmaster@11 205 $this->prepareOutput();
webmaster@11 206 return parent::__toString();
webmaster@11 207 }
webmaster@11 208 }
webmaster@11 209 ?>