Mercurial > defr > DualBlog
changeset 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 | 8f1125d27079 |
children | a7e770abbfc6 |
files | classes.php includes/class.factory.php includes/class.post.php includes/class.skeleton.php includes/class.template.php index.php templates/archive.xml templates/calendar.xml templates/commentIndex.xml templates/links.xml templates/main.xml templates/post.xml templates/sidebar.xml |
diffstat | 13 files changed, 565 insertions(+), 94 deletions(-) [+] |
line wrap: on
line diff
--- a/classes.php Wed Oct 24 14:38:08 2007 +0200 +++ b/classes.php Wed Oct 24 20:06:00 2007 +0200 @@ -3,12 +3,19 @@ WebLog : Classe globale & all */ -ini_set("include_path", $_SERVER['DOCUMENT_ROOT'] . "/blog/includes/"); +$docRoot = $_SERVER['DOCUMENT_ROOT']; +ini_set("include_path", "$docRoot/blog/includes/:$docRoot/blog/templates/"); + +setlocale(LC_ALL, "fr_FR.utf8@euro", "fr_FR.utf8"); require_once("config.php"); require_once("class.dataaccess.php"); +require_once("class.post.php"); +require_once("class.template.php"); require_once("class.requete.php"); require_once("class.domutils.php"); require_once("class.textutils.php"); +require_once('class.skeleton.php'); +require_once("class.factory.php"); ?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/class.factory.php Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,19 @@ +<?php +class Factory { + private static $db = null; + private static $mainTemplate = null; + private static $skeleton = null; + + public static function getDB() { + if(is_null(Factory::$db)) + Factory::$db = new DataAccess(); + return Factory::$db; + } + + public static function getSkeleton() { + if(is_null(Factory::$skeleton)) + Factory::$skeleton = new Skeleton(); + return Factory::$skeleton; + } +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/class.post.php Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,90 @@ +<?php +class Post { + private $tpl; + private $infos; + private $mess; + private $dateFormatee; + private $url; + private $commentLabel; + private $mood; + private $tags; + + public function __construct($infos) { + $this->infos = (object)$infos; + + // Récupération du template + $this->tpl = new Template('post.xml'); + + // Création du document fragment contenant le message + $Mess = str_replace( + array('<P>', '</P>'), + array('<p>', '</p>'), + $infos['Message']); + $Mess = Factory::getDB()->utf8_ensure($Mess); + $this->mess = $this->tpl->getDocumentFragment(); + $this->mess->appendXML($Mess); + + // Formatage de la date + $time = strtotime($infos['DatePost']); + $this->dateFormatee = strftime("%A %d %B %Y, %Hh%M", $time); + + // On détermine l'url de ce post + $strippedTitle = TextUtils::StripTitle($infos['Titre']); + $this->url = '/blog/posts/' . $infos['num_mess'] . '-' . $strippedTitle; + + // On détermine le label du lien vers les commentaires + $this->commentLabel = "Un p'tit commentaire ?"; + if($infos['NbCommentaires'] > 0) + $this->commentLabel .= " (" . $infos['NbCommentaires'] . ")"; + + // On s'occupe de l'indicateur d'humeur + if(!empty($infos['Emot'])) { + $mood = array('src' => "/blog/mood/{$infos['Emot']}.png", + 'alt' => 'Mood: ' . $infos['Emot']); + $this->mood = (object)$mood; + } + + // On détermine les tags du post + $db = Factory::getDB(); + $nbTags = $db->Query(" + SELECT T.Tag + FROM Tags T, Lien_Tags_Posts L + WHERE L.idMess={$infos['num_mess']} AND L.idTag = T.idTag + ORDER BY T.Tag + ", 2); + $tags = ''; + if($nbTags > 0) + { + while(0 !== ($tag = $db->GetRow(2))) + $tags .= " <a href='/blog/tags/{$tag['Tag']}'>{$tag['Tag']}</a> |"; + $tags = substr($tags, 0, -1); + $this->tags = $this->tpl->getDocumentFragment(); + $this->tags->appendXML($tags); + } + else { + $this->tags = 'aucun'; + } + } + + public function format() { + $params = array( + '#post@class' => 'PostContent ' . $this->infos->Emot, + 'postTitle' => $this->infos->Titre, + 'postDate' => $this->dateFormatee, + 'postContent' => $this->mess, + 'postNumber' => $this->infos->num_mess, + 'postComments' => $this->commentLabel, + '#linkPostNumber@href' => $this->url, + '#linkPostComments@href' => $this->url, + 'postTags' => $this->tags + ); + if(!empty($this->mood->src)) { + $params['#mood@src'] = $this->mood->src; + $params['#mood@alt'] = $this->mood->alt; + $params['#mood@class'] = 'mood'; + } + $this->tpl->setParams($params); + return $this->tpl; + } +} +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/class.skeleton.php Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,209 @@ +<?php +class Skeleton extends Template { + + private $styleSheets; + private $blogPosts; + private $showCalendar = false; + private $calendarMonth; + private $calendarYear; + + public function __construct() { + parent::__construct('main.xml'); + $this->styleSheets = array(); + $this->addDefaultSheets(); + $this->blogPosts = array(); + } + + public function setTitle($titre) { + $this->setParams(array('title' => $titre)); + } + + private function buildSidebar() { + $sidebar = new Template('sidebar.xml'); + // 1. Récupération des archives + $db = Factory::getDB(); + $db->Query(" + SELECT + MONTH(DatePost) As Month, + YEAR(DatePost) As Year, + COUNT(num_mess) As Nb + FROM Mess + GROUP BY + MONTH(DatePost), + YEAR(DatePost) + ORDER BY + YEAR(DatePost) DESC, + Month(DatePost) DESC + "); + $archives = array(); + while($row = $db->GetRow()) { + $curArchiveTpl = new Template('archive.xml'); + $monthName = TextUtils::getMonthName($row['Month']); + $curArchiveTpl->setParams(array( + 'a' => $monthName . ' ' . $row['Year'], + 'a@href' => "http://defr.org/blog/posts/{$row['Year']}/{$row['Month']}", + 'postCount' => '(' . $row['Nb'] . ')' + )); + $archives[] = array('li' => $curArchiveTpl); + } + // 2. Récupération des derniers commentaires + $db->Query(" + SELECT C.*, M.Titre + FROM Commentaires C, Mess M + WHERE C.MessId = M.num_mess AND C.Visible=1 + ORDER BY num_comm DESC LIMIT 20"); + $i = 0; + $comments = array(); + while($row = $db->GetRow()) { + $curCommentTpl = new Template('commentIndex.xml'); + // On récupère une version filtrée du titre du post ... + $tf = TextUtils::StripTitle($row['Titre']); + // ... Qui nous permet d'obtenir l'adresse du commentaire sur le post + $c_url = "/blog/post/{$row['MessId']}-$tf#c{$row['num_comm']}"; + // Si jamais on a une adresse mail, on rajoute un mailto: + if(strpos($row['Adresse'], '@') !== false) + $row['Adresse'] = 'mailto:' . $row['Adresse']; + // On commence par définir les paramètres généraux + $params = array( + '#CommentAuthor' => $row['Auteur'], + '#CommentAuthor@href' => $row['Adresse'], + '#Post' => $row['Titre'], + '#Post@href' => $c_url + ); + // On affiche les 5 commentaires les plus récents en version complète + // puis les 15 autres en versions résumées + if($i < 5) { + $Comment = nl2br($row['Comment']); + } + else { + $Comment = str_replace("\n", " ", strip_tags($row['Comment'])); + if(strlen($Comment > 100)) + $Comment = utf8_encode(substr(utf8_decode($Comment), 0, 97)) . "..."; + $params['li@class'] = 'fold'; + } + + $frag = $curCommentTpl->getDocumentFragment(); + $frag->appendXML($Comment); + $params['comment'] = $frag; + $curCommentTpl->setParams($params); + $comments[] = array('blogComment' => $curCommentTpl); + $i++; + } + // 3. Application des paramètres + $sidebar->setParams(array( + '#archives' => $archives, + '#BlogCommentIndex' => $comments + )); + return $sidebar; + } + + private function buildLinks() { + $links = new Template('links.xml'); + return $links; + } + + private function buildCalendar() { + $retVal = null; + if($this->showCalendar) { + $cMonth = $this->calendarMonth; + $cYear = $this->calendarYear; + $nextMonth = ($cMonth % 12) + 1; + $nextYear = ($nextMonth == 1) ? $cYear + 1 : $cYear; + $prevMonth = (($cMonth % 12) - 1) % 12; + $prevYear = ($prevMonth == 12) ? $cYear - 1 : $cYear; + $retVal = new Template('calendar.xml'); + $retVal->setParams(array( + '#calPrev' => TextUtils::getMonthName($prevMonth) . ' ' . $prevYear, + '#calPrev@href' => '/blog/posts/' . $prevYear . '/' . $prevMonth, + '#calNext' => TextUtils::getMonthName($nextMonth) . ' ' . $nextYear, + '#calNext@href' => '/blog/posts/' . $nextYear . '/' . $nextMonth, + 'currentMonth' => TextUtils::getMonthName($cMonth) . ' ' . $cYear + )); + } else { + $retVal = ''; + } + return $retVal; + } + + public function addStyleSheet($SheetName, $CSSFile, $enabled = false) { + $this->styleSheets[] = (object)array( + 'name' => $SheetName, + 'CSSFile' => $CSSFile, + 'enabled' => $enabled + ); + } + + public function enableStyleSheet($styleSheetName) { + foreach($this->styleSheets as $styleSheet) { + $styleSheet->enabled = ($styleSheet->name == $styleSheetName); + } + } + + public function addDefaultSheets() { + $StyleSheets = array( + "Somatic" => "Somatic.css", + "OliveVerde" => "OliveVerde.css", + "Lite:Reloaded" => "Lite_nv.css", + "Brushed" => "Brushed.css", + ":Hover" => "HoverExp.css"); + $CkStyle = (array_key_exists("style", $_COOKIE) && + array_key_exists($_COOKIE['style'], $StyleSheets)) + ? $_COOKIE['style'] + :"Somatic"; + foreach($StyleSheets as $SheetName => $CSSFile) + $this->addStyleSheet($SheetName, $CSSFile, ($SheetName == $CkStyle)); + } + + public function addBlogPost(Template $blogPost) { + $this->blogPosts[] = $blogPost; + } + + public function showCalendar($newValue = false) { + $this->showCalendar = $newValue; + } + + public function setCalendarMonth($month, $year) { + $this->calendarMonth = $month; + $this->calendarYear = $year; + } + + private function prepareOutput() { + $params = array(); + + // Ajout de la sidebar + $params['sidebar'] = $this->buildSideBar(); + + // Ajout de la liste des liens + $params['links'] = $this->buildLinks(); + + // Ajout des feuilles de style + $params['possibleStyleSheets'] = array(); + foreach($this->styleSheets as $styleSheet) { + $type = ($styleSheet->enabled) ? "" : "Alternate "; + $type .= "StyleSheet"; + $params['possibleStyleSheets'][] = array( + 'link@href' => '/blog/css/' . $styleSheet->CSSFile, + 'link@rel' => $type, + 'link@title' => $styleSheet->name + ); + } + + // Affichage éventuel des liens vers les mois précédents et suivants + $params['calendarPrevNext'] = $this->buildCalendar(); + + // Ajout des posts de blog + $params['#Posts'] = array(); + foreach($this->blogPosts as $blogPost) { + $params['#Posts'][] = array('post' => $blogPost); + } + + // Application des l'ensemble de ces paramètres + $this->setParams($params); + } + + public function __toString() { + $this->prepareOutput(); + return parent::__toString(); + } +} +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/class.template.php Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,1 @@ +../../templates/class.template.php \ No newline at end of file
--- a/index.php Wed Oct 24 14:38:08 2007 +0200 +++ b/index.php Wed Oct 24 20:06:00 2007 +0200 @@ -1,102 +1,46 @@ <?php - setlocale(LC_ALL, "fr_FR.utf8@euro", "fr_FR.utf8"); - ini_set("display_errors", "off"); - include("classes.php"); - $type = $_GET['type']; - $year = $_GET['year']; - $month = $_GET['month']; - $prevMonth = ($month - 1)%12; if($prevMonth == 0) $prevMonth = 12; - $prevYear = ($month == 1)? $year-1 : $year; - $nextMonth = $month % 12 + 1; - $nextYear = ($month == 12) ? $year+1 : $year; - $Data = new DataAccess; - include("top.php"); - $Data->Connect(); - $query = ($type != 'cal') ? - " SELECT * - FROM Mess + require_once("classes.php"); + $sk = Factory::getSkeleton(); + $sk->setTitle('Dual { v10 : OS Edition } Blog'); + // Détermination de la requête à exécuter + if(!array_key_exists('mode', $_GET)) { + $query = " + SELECT * + FROM Mess WHERE num_version='Version 10' ORDER BY num_mess DESC LIMIT 10 - " : " + "; + } elseif($_GET['mode'] == 'cal') { + $sk->showCalendar(true); + $year = intval($_GET['year']); + $month = intval($_GET['month']); + $sk->setCalendarMonth($month, $year); + $query = " SELECT * - FROM Mess - WHERE YEAR(DatePost)={$year} AND MONTH(DatePost)={$month} + FROM Mess + WHERE + YEAR(DatePost) = $year AND + MONTH(DatePost) = $month ORDER BY num_mess DESC - "; - $Data->query($query); - if($type == "cal") { - echo("<div class='cal'>"); - if($prevYear > $startDate['year'] - 1 || ($prevYear > $startDate['Year'] - 2 && $prevMonth > $startDate['month'] - 1)) - echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); - else - echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); - if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) ) - echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1) ."'>{$arMonth[$month%12]} {$nextYear}</a>"); - else - echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>"); - echo("{$arMonth[$month - 1]} {$year}</div> "); + LIMIT 10 + "; + } elseif($_GET['mode'] == 'tag') { + $tag = $_GET['tag']; + $query = " + SELECT * + FROM Mess m + LEFT JOIN Lien_Tags_Posts l ON m.num_mess=l.idMess + LEFT JOIN Tags t ON l.idTag = t.idTag + WHERE t.Tag='{$_GET['tag']}' + ORDER BY num_mess DESC + "; } - while($row=$Data->GetRow()) { - $mood = ''; - $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message']))); - $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost'])); - $Titre = $Data->utf8_ensure($row['Titre']); - $Titre_url = str_replace(" ", "_", strip_tags($Titre)); - $Titre_url = str_replace("-", "_", $Titre_url); - $Titre_url = str_replace(array("é", "è"), "e", $Titre_url); - $Titre_url = str_replace("à", "a", $Titre_url); - $Titre_url = str_replace("ù", "u", $Titre_url); - $Titre_url = str_replace(array("î", "ï"), "i", $Titre_url); - if(!empty($row['Emot'])) { - $mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />"; + $db = Factory::getDB(); + $db->debugquery($query); + while($row = $db->GetRow()) { + $post = new Post($row); + $sk->addBlogPost($post->format()); } - $nbTags = $Data->Query(" - SELECT T.Tag - FROM Tags T, Lien_Tags_Posts L - WHERE L.idMess={$row['num_mess']} AND L.idTag = T.idTag - ORDER BY T.Tag - ", 2); - $tags = ''; - if($nbTags > 0) - { - $tags = "<span class='Tags'><em>Tags</em> :"; - while(0 !== ($tag = $Data->GetRow(2))) - $tags .= " <a href='/blog/tags/{$tag['Tag']}'>{$tag['Tag']}</a> |"; - $tags = substr($tags, 0, -1) . ' ;</span><br />'; - } - - echo(" - <div class='PostContent {$row['Emot']}'> - <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2> - {$mood} - {$Mess} - <p class='postInfos'> - {$tags} - <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">#{$row['num_mess']}</a> - - <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\"> - "); - if(!is_null($row['NbCommentaires']) && $row['NbCommentaires']!=0) - echo("Un 'tit commentaire ( {$row['NbCommentaires']} ) ?"); - else - echo("Un 'tit commentaire ?"); - echo(" - </a> - </p> - </div>"); - } - if($type == "cal") { - echo("<div class='cal'>"); - if($prevYear > $startDate['year'] - 1 && $prevMonth > $startDate['month'] - 1) - echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); - else - echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); - if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) ) - echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1) ."'>{$arMonth[$month%12]} {$nextYear}</a>"); - else - echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>"); - echo("{$arMonth[$month - 1]} {$year}</div> "); - } - $Data->Close(); - include("foot.php"); + echo $sk; ?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/archive.xml Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,8 @@ +<?xml version='1.0' encoding='UTF-8'?> +<wrapper + xmlns='http://defr.net/2007/template' + xmlns:h='http://www.w3.org/1999/xhtml'> + <h:a /> +   + <postCount /> +</wrapper>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/calendar.xml Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,8 @@ +<?xml version='1.0' encoding='UTF-8'?> +<div xmlns='http://www.w3.org/1999/xhtml' + xmlns:tr='http://defr.net/2007/template' + class='cal'> + <a tr:id='calPrev' class='calPrev' /> + <a tr:id='calNext' class='calNext' /> + <tr:currentMonth /> +</div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/commentIndex.xml Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,8 @@ +<?xml version='1.0' encoding='UTF-8'?> +<li xmlns='http://www.w3.org/1999/xhtml' + xmlns:tr='http://defr.net/2007/template'> + <p>Commentaire de <a tr:id='CommentAuthor' /> sur le post <a tr:id='Post' /> + <br /> + <tr:comment /> + </p> +</li>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/links.xml Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,48 @@ +<?xml version='1.0' encoding='UTF-8'?> + <dl id="Link" xmlns='http://www.w3.org/1999/xhtml'> + <dt>Mes Sites</dt> + <dd> + <ul> + <li><a href='http://defr.org/'>Mon collectif</a></li> + <li><a href='http://mega-poudlard.com'>Mega-Poudlard.com, là ou la magie prend vie</a></li> + </ul> + </dd> + + <dt>Weblogs</dt> + <dd> + <ul> + <li><a href='http://ania.weasleyswheezes.net/blog/' title='Friandises'>Ania</a></li> + <li><a href='http://cerveau.cest-pas-pareil.net' title='Cerveau Optionnel'>Circéus</a></li> + <li><a href='http://www.elventroublemakers.net/roe' title='Record of Evilness'>Drakys</a></li> + <li><a href='http://ennaluna.pitas.com' title='Deep Mistery'>Ennaluna</a></li> + <li><a href='http://kevin.descoubes.free.fr/kisscoolblog' title='KissCoolBlog'>Kévin</a></li> + <li><a href='http://marre.cest-pas-pareil.net' title='Y en a Marre !'>Rhiannon</a></li> + <li><a href='http://www.elventroublemakers.net/FS' title='FlipSide'>Spider</a></li> + <li><a href='http://ladyzeek.pitas.com' title='Strange World'>Zeek</a></li> + </ul> + </dd> + + <dt>Sites fréquement visités</dt> + <dd> + <ul> + <li><a href='http://www.aqua-soft.org/' title="Site dédiée à l'obtention sur PC d'application repliquant le comportement de celles trouvées sur Mac, aux skins, icons, wallpapers...">Aqua-Soft</a></li> + <li><a href='http://www.deviantart.com' title='Erm, well, DeviantArt'>DeviantArt</a></li> + <li><a href='http://www.kingsofchaos.com' title='Text-based MMORPG'>Kings Of Chaos</a></li> + <li><a href='http://www.kochonland.com' title='Elevage de Kochon, Miva a réussi à me rendre addicted'>Kochonland</a></li> + <li><a href='http://www.mozdev.org' title='Site rassemblant les extensions programmées pour Firebird...'>MozDev.org</a></li> + <li><a href='http://www.mozillazine.org' title='Site de discussion sur Firebird, ses thèmes, son developpement...'>MozillaZine</a></li> + <li><a href='http://www.stardock.com' title="Site des créateurs d'ObjectDock et WindowBlinds entre autres">Stardock</a></li> + <li><a href='http://www.gimp.org/' title='Site du meilleur éditeur graphique, du moins à mon avis ^^;'>The GIMP</a></li> + <li><a href='http://www.wincustomize.com' title='Rassemblement de skins pour ObjectDock, Window Blinds & co'>WinCustomize</a></li> + </ul> + </dd> + + <dt>Cliques / Webrings</dt> + <dd> + <ul> + <li><a href='http://mega-poudlard.com/Autres/JournalJedusor.asp'>Journaux de Jedusor - Mega-Poudlard.com</a></li> + <li><a href='http://xdaddict.weasleyswheezes.net/'>>> // XD Addict // <<</a></li> + <li><a href='http://duckie.sinfree.net/hxf/'>Hunter x Fanatic</a></li> + </ul> + </dd> + </dl>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/main.xml Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml" + xmlns:tr="http://defr.net/2007/template"> + <head> + <title /> + <link rel='StyleSheet' type='Text/CSS' href='/blog/css/comment.css' /> + <tr:possibleStyleSheets> + <link tr:toClone='true' type='text/css' media='screen' /> + </tr:possibleStyleSheets> + <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/blog/dualblog.atom" /> + <link rel="alternate" type="application/rss+xml" title="RSS 2.0 feed" href="/blog/dualblog.rss" /> + <meta http-equiv='content-type' content='text/html; charset=utf-8' /> + <meta name='author' content='Franck Deroche' /> + <script type="Text/JavaScript" src="/blog/RollUp.js"></script> + </head> + + <body id="Main"> + <h1>Dual Blog : DeFr's Weblog</h1> + <div id="Posts" tr:id='Posts'> + <tr:calendarPrevNext /> + <tr:post tr:toClone='true' /> + <tr:calendarPrevNext /> + </div> + <div id="Adresse"> + <span>Sites visités</span> + </div> + <tr:links /> + <tr:sidebar /> + </body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/post.xml Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,16 @@ +<?xml version='1.0' encoding='utf-8'?> +<div class='PostContent Weird' + xmlns='http://www.w3.org/1999/xhtml' + xmlns:tr='http://defr.net/2007/template' + tr:id='post'> + <h2><tr:postTitle /> | <span class='Date'><tr:postDate /></span></h2> + <img tr:id='mood' /> + + <tr:postContent /> + + <p class='postInfos'> + <span class='Tags'><em>Tags</em> : <tr:postTags /></span><br /> + <a tr:id='linkPostNumber'><tr:postNumber /></a> - + <a tr:id='linkPostComments'><tr:postComments /></a> + </p> +</div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/sidebar.xml Wed Oct 24 20:06:00 2007 +0200 @@ -0,0 +1,83 @@ +<?xml version='1.0' encoding='UTF-8'?> + <dl id="SideBar" + xmlns='http://www.w3.org/1999/xhtml' + xmlns:tr='http://defr.net/2007/template'> + <dt id="About">About</dt> + <dd> + <p>Quelques informations sur cette version ? Ca va être un peu difficile étant donné que le choix a été fait de laisser au visiteur + le choix de l'apparence graphique de ce blog par le biais de <i>feuilles de styles alternatives</i> ( oui, je viens de pondre la traduction, + non je sais pas si c'est une bonne idée de traduire des termes techniques à 23h45 un 31 décembre ). Toutefois, pour ce qui est du style + par défaut, <i>Somatic</i>, je peux vous dire que les icones viennent du talentuex <a href='http://www.dlanham.com'>David Lanham</a>, + pour <a href='http://www.theiconfactory.com'>The IconFactory</a>, dans son set Somatic Windows</p> + <p>Quelques faits ? La magie de pouvoir changer l'apparence de ce site à volonté ( quatres versions disponible en lien ci-dessous pour + le moment, plus si vous utilisez un navigateur vous laissant choisir par lui-même l'apparence parce que vous aurez alors en <i>bonus</i> + les versions que je considère, erm, <i>expérimentales</i> ) est du essentiellement au tandem XHTML 1.1 et CSS 2.1, permettant + de séparer le contenu, c'est à dire les informations elles-même, de la facon dont elles sont affichés à l'écran, ce qui permet entre autre + ce que vous avez sous les yeux ^^;</p> + <ul><li><a href="#" onclick="styleSwitch.set('OliveVerde');return false;">Olive Verde</a></li> + <li><a href="#" onclick="styleSwitch.set('Brushed'); return false;">Brushed</a></li> + <li><a href="#" onclick="styleSwitch.set('Lite:Reloaded');return false;">Lite : Reloaded</a></li> + <li><a href="#" onclick="styleSwitch.set('Somatic');return false;">Somatic</a></li> + </ul> + </dd> + + <dt id="Profile">Profile</dt> + <dd> + <p>Franck ( Deroche Franck, oui, la parodie de James Bond est nulle, et alors ? ), 20 ans + est un habitant de Plaisir, France, la Terre, petite planète + du système solaire paumée entre Venus et Mars. Il est actuellement en école d'ingénieur + à l'<a href='http://www.ec-nantes.fr'>Ecole Centrale de Nantes</a> : une école d'ingénieur + généraliste permettant de faire à peu près n'importe quel travail d'ingénieur en sortie.</p> + <p>Toutefois la spécialisation de Franck sera très certainement dans le <i>domaine informatique</i>, pour lequel + il éprouve une passion sans bornes. Normallement, de telles études devrait lui laisser assez + de temps pour qu'il puisse faire ce qu'il veut à côte, mais ce n'est que la théorie...</p> + <p>Enfin, Franck est en ce moment très ( très très ) <i>amoureux</i> d'une jeune demoiselle + particulièrement <em>brillante</em> et <em>sympathique</em>, extrement <em>jolie</em>, adepte de <em>Zelda</em> et du <em>violet</em> + qui se reconnaitra très certainement, et qui malheureusement n'habite pas vraiment très près de Nantes... Et en plus, elle ne considère même pas + les ordinateurs comme des choses bizarres venue d'ailleurs, pouvant même <em>programmer</em> pour le web ^^;</p> + </dd> + + <dt id="Like">Like / Dislike</dt> + <dd> + <p>Qu'est-ce que Franck peut bien aimer ? Erf, bah, tout à la fois, pas grand chose et un nombre impressionant de machins qui pourrait un être normallement + constitué ne serait probablement rien d'autre que tout au plus des anecdotes. Toutefois, il faut bien avouer que son passe-temps majeur n'a rien de bien + original, puisqu'il s'agit de l'informatique, ce media des temps modernes sur lequel on entend à peu près tout et n'importe quoi. Et en ce qui concerne + l'informatique, on peut alors dire que Franck est on ne peut plus écléctique, touchant un peu à tout... Ce qui retient le plus son attention toutefois, en + ce moment du moins, reste la <em>création de sites webs</em>, la <em>programmation</em> et la <em>customisation</em> de son environement, à un point pouvant parfois friser le ridicule...</p> + <p>Lorsqu'il n'est pas collé à son écran, on a alors toutes les chances de le trouver en train de lire un bouquin, la lecture lui prenant elle aussi une partie non + négligeable de ses temps libres. Dans ce domaine aussi, l'eclectisme fait loi, il peut lire plus ou moins tout et n'importe quoi... Ces dernieres découvertes majeures en + la matiere sont probablement les bouquins de Werber ( qu'il a toutefois découvert depuis un certain temps maintenant ) et plus recement les mangas que sont <span class="i">Hunter x Hunter</span>, + <em>Naruto</em> et surtout <em>One Piece</em>, qui l'ont amenés dans un univers ou il ne s'était curieusement que rarement aventuré.</p> + <p>Quant à sortir des deux occupations sus-mentionnées, il est difficile de donner une énumeration précise de ce qu'il aime faire, tant cela tant à l'anecdote : faire du cerf-volant sur la + plage avec le son des vagues en fond sonore, se baigner, etc.</p> + <p>Quant à ce qu'il n'aime pas, les réponses sont alors même pour lui moins évidente... Au niveau comportemental, c'est à dire dans ces relations avec les autres individus de l'espece humaine, + le tout pourrait se resumer par une formule bateau du type : <em>qu'on ne respecte pas le cadre privé dans lequel il souhaite parfois se retrancher</em>... En effet, Franck aime parfois + se retrouver livrer à lui-même, avoir des instants bien à lui où il n'est pas obligé d'expliquer ses agissements, et où tout simplement il n'est pas obliger de communiquer avec d'autres + individus à qui 'il n'a finalement rien à dire... D'autre part, il deteste se sentir <em>exploiter</em>, en mettant dans cette notion tout travail inutile pour lui, que ce soit au profit de + quelqu'un d'autre, ou même completement inutile à qui que ce soit. Toutefois, sa notion de l'utilitié semble legerement particulière, car passer un temps fou sur des jeux ne le dérange par + contre générallement pas le moins du monde...</p> + </dd> + + <dt id="Archives">Archives</dt> + <dd> + <p>Geekness n'était pas updaté depuis un bon bout de temps, la section va donc laisser sa place à quelques choses qui devrait à priori être + beaucoup plus utile, puisque je compte laisser des archives accessibles ^^; Eventuellement, des petits bonus pourrait atterir dans cette section, + comme une liste des posts jugés les plus dignes d'interet, ou un truc de ce genre. En tout cas, pour le moment, le voici, contenant la liste des + archives pour le moment disponible :<br /> + Archives :</p> + <ul tr:id='archives'> + <li tr:toClone = 'true' /> + </ul> + </dd> + + <dt id="ToDo">Commentaires</dt> + <dd> + <p>Voici la liste des 5 derniers commentaires fait sur ce blog, tous posts +confondus. Ca devrait permettre à tout le monde ( et notamment à moi-même ) de +repérer les nouveaux commentaires qui arrivent, même s'ils le sont sur des posts +vieux de 6 mois ^^</p> + <ul tr:id='BlogCommentIndex'> + <tr:blogComment tr:toClone='true' /> + </ul> + </dd> + </dl>