12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220 |
- <?php
- # ***** BEGIN LICENSE BLOCK *****
- # This file is part of DotClear.
- # Copyright (c) 2004 Olivier Meunier and contributors. All rights
- # reserved.
- #
- # DotClear is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # DotClear is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with DotClear; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- #
- # ***** END LICENSE BLOCK *****
- /**
- @doc
- == Fonctionnement des gabarits ==
- === Introduction ===
- Le système de modèle de page de DotClear n'est pas ce qui se fait de plus
- simple à l'usage mais reste abordable pour peu de bien lire la
- documentation.
- Le fonctionnement est très simple, il s'agit de fonctions PHP qui se
- chargent d'afficher l'information qu'on leur demande.
- Parfois un motif est utilisé pour formater l'information affichée. Ce motif
- constitue une marque de substitution, généralement identifiée par %s. Pour de
- plus amples détails, suivre la documentation de la fonction
- PHP|PHP Hypertext Processor,
- [http://fr2.php.net/manual/fr/function.sprintf.php sprintf].
- Pour chaque fonction utilisant un motif, nous expliquerons comment le remplir.
- */
- /**
- @doc
- === Les fonctions informatives ===
- Les fonctions suivantes permettent d'afficher des renseignements divers sur
- le blog ou les billets.
- */
- /**
- @function dcInfo
- Fonction affichant une information sur le blog.
- La propriété '''name''' peut prendre les valeurs suivantes :
- * name : non du weblogue
- * theme : chemin vers le répertoire du thème
- * img : chemin vers les images
- * url : URL de la home page du blog
- * rss : chemin vers le fil RSS
- * atom : chemin vers le fil Atom
- * search : chemin de l'action pour le moteur de rechercher
- * logo : chemin vers l'image du logo
- * encoding : Encodage des caractères
- * lang : langue principale du weblogue
- Exemple :
- {{{
- #!php
- <h1><?php dcInfo(); ?></h1>
- <a href="<?php dcInfo('rss'); ?>">fil rss</a>
- }}}
- Note : vous pouvez faire un lien vers le fil RSS ou Atom d'une catégorie
- très facilement en ajoutant l'identifiant de la catégorie à l'URL, comme
- ceci par exemple :
- {{{
- #!php
- <a href="<?php dcInfo('rss'); ?>?cat=General">RSS général</a>
- }}}
- @param string name Nom de la propriété à afficher ('name')
- */
- function dcInfo($name='name')
- {
- switch ($name)
- {
- case 'theme' : echo $GLOBALS['theme_uri'].$GLOBALS['__theme']; break;
- case 'img' : echo $GLOBALS['img_path']; break;
- case 'url' : echo dc_blog_url; break;
- case 'rss' : echo dc_blog_rss; break;
- case 'atom' : echo dc_blog_atom; break;
- case 'search' : echo dc_blog_url; break;
- case 'logo' : echo $GLOBALS['img_path'].'/dotclear_pw.png'; break;
- case 'encoding' : echo dc_encoding; break;
- case 'lang' : echo dc_default_lang; break;
- case 'desc' : echo dc_blog_desc; break;
- default : echo dc_blog_name;
- }
- }
- /**
- @function dcDayDate
- Cette fonction affiche la date du jour. Elle est utilisée dans la boucle
- des billets et n'affiche la date que lors du premier billet du jour. Cela
- permet d'afficher la date du jour au dessus de plusieurs billets du même
- jour.
- On peut entourer la date de marqueur ou de texte grâce à la chaîne
- de substitution '''s''' passée en argument. Par exemple:
- {{{
- #!php
- <?php dcDayDate('<h2>%s</h2>'); ?>
- }}}
- @param string s Chaine de substition ('%s')
- */
- function dcDayDate($s='%s')
- {
- if ($GLOBALS['news']->firstPostOfDay())
- {
- printf($s,$GLOBALS['news']->getLDate());
- }
- }
- /**
- @function dcCalendar
- Cette fonction affiche un calendrier contextuel (mois, année, jour).
- Le calendrier est un tableau dans une balise <div> dont la classe
- CSS|Cascading Style Sheet est ''cal''. Les nom des jours sont indiqués avec des
- cellules d'en-tête (th) et le titre avec (caption).
- Exemple d'utilisation :
- {{{
- #!php
- <?php dcCalendar(); ?>
- }}}
- @param string block Chaine de substitution pour pour le tableau ('<div class="cal"><table summary="calendrier">%s</table></div>')
- */
- function dcCalendar($block='<div class="cal"><table summary="calendrier">%s</table></div>')
- {
- global $year,$month,$day,$cat_id,$lang;
-
- echo $GLOBALS['blog']->xCalendar($year,$month,$day,$cat_id,$lang,$block);
- }
- /**
- @function dcHeadLinks
- Cette fonction affiche les liens (link) dans l'en-tête du fichier HTML.
- Elle génère automatiquement les liens de navigation dans le blog. Il
- suffit de la placer dans l'en-tête du document :
- {{{
- #!php
- <head>
- <?php dcHeadLinks(); ?>
- </head>
- }}}
- */
- function dcHeadLinks()
- {
- global $blog, $cat_id, $rs_cat;
-
- echo dcPostNext(1,'<link rel="next" href="%3$s" title="%2$s" />'."\n");
- echo dcPostNext(-1,'<link rel="previous" href="%3$s" title="%2$s" />'."\n");
-
- if (!$rs_cat->isEmpty() && !$cat_id)
- {
- while (!$rs_cat->EOF())
- {
- if ($rs_cat->f('nb_post') > 0)
- {
- $id = $rs_cat->f('cat_libelle_url');
- $libelle = $rs_cat->f('cat_libelle');
- $lien = sprintf($blog->front_url['cat'],$id);
-
- echo '<link rel="section" href="'.$lien.'" title="'.$libelle.'" />'."\n";
- }
- $rs_cat->moveNext();
- }
- $rs_cat->moveStart();
- }
-
- $arry_months = $GLOBALS['arry_months'];
- $comp_url = '';
- if ($cat_id) {
- $comp_url = $cat_id.'/';
- }
- foreach ($arry_months as $ts => $d)
- {
- $titre = dt::str('%B %Y',$ts);
- $url = sprintf($blog->front_url['archive'],$comp_url.date('Y',$ts),date('m',$ts));
- echo '<link rel="archive" href="'.$url.'" title="'.$titre.'" />'."\n";
- }
-
- if ($GLOBALS['mode'] == 'home')
- {
- echo $GLOBALS['news']->getHeadLinks();
- }
- }
- /**
- @function dcSinglePostTitle
- Cette fonction affiche le titre d'un billet si on est sur une page présentant
- un billet (/blog/yyyy/mm/dd/titre par exemple).
- On l'utilisera dans la balise <title> du document. Par exemple:
- {{{
- #!php
- <title><?php dcSinglePostTitle(); ?></title>
- }}}
- @param string s Chaîne de substitution ('%s - ')
- */
- function dcSinglePostTitle($s='%s - ')
- {
- if ($GLOBALS['mode'] == 'post') {
- printf($s,$GLOBALS['news']->f('post_titre'));
- }
- }
- /**
- @function dcSingleCatTitle
- Cette fonction affiche le nom de la catégorie s'il y a lieu de l'afficher. On peut
- l'utiliser dans le titre, comme '''dcSinglePostTitle'''.
- @param string s Chaîne de substitution ('%s - ')
- */
- function dcSingleCatTitle($s='%s - ')
- {
- if ($GLOBALS['cat_id'] != '') {
- printf($s,$GLOBALS['news']->f('cat_libelle'));
- }
- }
- /**
- @function dcSingleMonthTitle
- Cette fonction affiche le mois et l'année en cours s'il y a lieu de l'afficher.
- S'utilise aussi dans le titre comme '''dcSinglePostTitle'''.
- @param string s Chaîne de substitution ('%s - ')
- */
- function dcSingleMonthTitle($s='%s - ')
- {
- if ($GLOBALS['mode'] == 'month') {
- $ts = strtotime($GLOBALS['year'].'-'.$GLOBALS['month'].'-01 00:00');
- printf($s,dt::str('%B %Y',$ts));
- }
- }
- /**
- @function dcCustomTitle
- Cette fonction affiche le contenu de la variable globale $dc_custom_title.
- Cette variable peut-être assignée par un plugin.
- @param string s Chaîne de substitution ('%s - ')
- */
- function dcCustomTitle($s='%s - ')
- {
- if (!empty($GLOBALS['dc_custom_title'])) {
- printf($s,$GLOBALS['dc_custom_title']);
- }
- }
- /**
- @doc
- ==== Exemples d'usage des fonctions pour la balise <title> ====
- Voici un exemple de commun de balise <title> à partir des fonctions précédentes :
- {{{
- #!php
- <title><?php dcSinglePostTitle('%s - '); dcSingleCatTitle('%s - ');
- dcSingleMonthTitle('%s - '); dcCustomTitle('%s - '); dcInfo(); ?></title>
- }}}
- */
- /**
- @function dcLangList
- Cette fonction affiche une liste des langues définies dans les billets. Les
- langues s'affichent uniquement si au moins deux langues différentes existent.
- Ceci permet d'offrir une navigation par langue dans le weblogue.
- @param string block Chaine de substitution pour pour la liste ('<ul>%s</ul>')
- @param string item Chaine de substitution pour un élément ('<li>%s</li>')
- */
- function dcLangList($block='<ul>%s</ul>',$item='<li>%s</li>')
- {
- global $rs_lang,$lang,$blog;
-
- if ($rs_lang->nbRow() > 1)
- {
- $res = '';
- while ($rs_lang->fetch())
- {
- $lien = '<a href="'.
- sprintf($blog->front_url['cat'],$rs_lang->f(0)).'">'.
- $rs_lang->f(0).'</a>';
-
- if ($lang == $rs_lang->f(0)) {
- $lien = '<strong>'.$lien.'</strong>';
- }
-
- $res .= sprintf($item,$lien);
- }
-
- printf($block,$res);
- }
- }
- /**
- @function dcCatList
- Cette fonction affiche une liste des catégories avec les liens pour y
- accéder. La liste générée est une liste non ordonnée (<ul>), il est donc
- très simple de la mettre en forme par la suite.
- @param string block Chaine de substitution pour pour la liste ('<ul>%s</ul>')
- @param string item Chaine de substitution pour un élément ('<li>%s</li>')
- */
- function dcCatList($block='<ul>%s</ul>',$item='<li>%s</li>')
- {
- global $rs_cat, $cat_id, $lang, $blog;
-
- $comp_url = '';
-
- if ($lang) {
- $comp_url = $lang.'/';
- }
-
- if (!$rs_cat->isEmpty())
- {
- $res = '';
-
- while (!$rs_cat->EOF())
- {
- if ($rs_cat->f('nb_post') > 0)
- {
- $id = $rs_cat->f('cat_libelle_url');
- $libelle = $rs_cat->f('cat_libelle');
-
- $lien = '<a href="'.
- sprintf($blog->front_url['cat'],$comp_url.$id).
- '">'.$libelle.'</a>';
-
- if ($cat_id == $id) {
- $lien = '<strong>'.$lien.'</strong>';
- }
-
- $res .= sprintf($item,$lien);
- }
- $rs_cat->moveNext();
- }
- $rs_cat->moveStart();
-
- printf($block,$res);
- }
- }
- /**
- @function dcMonthsList
- Cette fonction affiche la liste des mois contenant les archives.
- Si on se trouve dans une catégorie, seuls les mois de cette catégorie
- seront affichés.
- @param string block Chaine de substitution pour pour la liste ('<ul>%s</ul>')
- @param string item Chaine de substitution pour un élément ('<li>%s</li>')
- */
- function dcMonthsList($block='<ul>%s</ul>',$item='<li>%s</li>')
- {
- global $arry_months, $month, $year, $cat_id, $lang, $blog;
-
- $comp_url = '';
-
- if ($lang) {
- $comp_url .= $lang.'/';
- }
-
- if($cat_id) {
- $comp_url .= $cat_id.'/';
- }
-
- $res = '';
-
- foreach($arry_months as $ts => $d)
- {
- $titre = dt::str('%B %Y',$ts);
-
- $url = sprintf($blog->front_url['archive'],$comp_url.date('Y',$ts),date('m',$ts));
- $lien = '<a href="'.$url.'">%s</a>';
-
- $liClass = '';
-
- if($year == date('Y',$ts) && $month == date('m',$ts)) {
- $lien = '<strong>'.$lien.'</strong>';
- }
-
- $res .= sprintf($item,sprintf($lien,$titre));
- }
-
- if (count($arry_months) > 0) {
- printf($block,$res);
- }
- }
- /**
- @function dcSelection
- Cette fonction affiche une liste des billets sélectionnés, avec simplement
- le titre et un lien vers le billet. L'affichage par défaut produira une liste,
- vous pouvez l'appeler tout simplement par '''dcSelection()'''.
- @param string block Chaine de substitution pour pour la liste ('<ul>%s</ul>')
- @param string item Chaine de substitution pour un élément ('<li><a href="%2$s">%1$s</a></li>')
- @param integer limit Nombre de titres à afficher (ilimité)
- */
- function dcSelection($block='<ul>%s</ul>',$item='<li><a href="%2$s">%1$s</a></li>',$limit=NULL)
- {
- global $blog;
-
- $rs = $blog->getLastNews($limit,'','post_dt DESC',true);
-
- if (!$rs->isEmpty()) {
- $res = '';
- while (!$rs->EOF()) {
- $res .= sprintf($item,$rs->f('post_titre'),$rs->getPermURL());
- $rs->moveNext();
- }
- printf($block,$res);
- }
- }
- /**
- @function dcSearchString
- Cette fonction affiche la chaîne de recherche lorsque qu'une recherche vient d'être
- effectuée.
- @param string s Chaîne de substitution ('%s')
- */
- function dcSearchString($s='%s')
- {
- if(!empty($_GET['q'])) {
- printf($s,htmlspecialchars(stripslashes($_GET['q'])));
- }
- }
- /**
- @function dcAdminLink
- Cette fonction affiche un lien vers l'espace d'administration du blog dans le
- cas ou une session d'administration est ouverte (et seulement dans ce cas).
- @param string s Chaine de substitution ('<ul><li><a href="%s">admin</a></li></ul>')
- */
- function dcAdminLink($s='<ul><li><a href="%s">admin</a></li></ul>')
- {
- if (isset($_SESSION['sess_user_id']) && defined('DC_ECRIRE')) {
- $url = dc_app_url.'/'.DC_ECRIRE.'/index.php';
- printf($s,$url);
- }
- }
- # Billets #################################################
- /**
- @doc
- === Traitement des billets. ===
- Les fonctions suivantes doivent être utilisées uniquement dans un
- contexte de billet. Cela signifie qu'on l'utilisera si '''$mode'''
- vaut 'post' ou dans une boucle de billet. Exemple:
- {{{
- #!php
- <?php if ($mode == 'post') : ?>
- on peut utiliser les fonctions.
- <?php endif; ?>
- }}}
- L'affichage des listes de billets est géré par une boucle très simple
- à mettre en place. Voici un exemple qui affiche le titre des billets :
- {{{
- #!php
- <?php while ($news->fetch()) : ?>
- <h3><?php dcPostTitle(); ?></h3>
- <?php endwhile; ?>
- }}}
- */
- /**
- @function dcPostURL
- Cette fonction affiche l'URI du billet, son permalien. On l'utilisera dans
- l'affichage d'un billet (boucle ou pas). Par exemple:
- {{{
- #!php
- <a href="<?php dcPostURL(); ?>">lien permanent</a>
- }}}
- */
- function dcPostURL()
- {
- echo $GLOBALS['news']->getPermURL();
- }
- /**
- @function dcPostID
- Cette fonction affiche l'ID du billet (son numéro identifiant unique).
- */
- function dcPostID()
- {
- echo $GLOBALS['news']->f('post_id');
- }
- /**
- @function dcPostTitle
- Cette fonction affiche le titre d'un billet, avec chaîne de substitution
- possible. Exemple:
- {{{
- #!php
- <h2><?php dcPostTitle(); ?></h2>
- }}}
- */
- function dcPostTitle($s='%s')
- {
- printf($s,$GLOBALS['news']->f('post_titre'));
- }
- /**
- @function dcPostCatTitle
- Dans le contexte du billet, cette fonction affiche le nom de la catégorie
- du billet.
- */
- function dcPostCatTitle()
- {
- echo $GLOBALS['news']->f('cat_libelle');
- }
- /**
- @function dcPostCatURL
- Cette fonction affiche l'URL de la catégorie d'un billet. Ne s'utilise que dans
- le contexte d'un billet. Par exemple:
- {{{
- #!php
- <a href="<?php dcPostCarURL(); ?>"><?php dcPostCatTitle(); ?></a>
- }}}
- */
- function dcPostCatURL()
- {
- echo $GLOBALS['news']->getCatURL();
- }
- /**
- @function dcPostContent
- Cette fonction affiche le contenu d'un billet (sans son chapô). On peut
- limiter le nombre de mots affichés avec le paramère '''part'''.
- Si '''part''' vaut 0 alors on affiche tout le billet.
- @param integer part Nombre de mots à afficher
- */
- function dcPostContent($part=0)
- {
- global $news;
-
- if ($part > 0) {
- echo $news->blog->getPart($news->f('post_content'),$part);
- } else {
- echo $news->getContent();
- }
- }
- /**
- @function dcPostChapo
- Cette fonction affiche le chapô d'un billet s'il existe, sinon elle
- n'affiche rien. Le paramètre '''s''' permet d'ajouter des information lors
- de l'affichage du chapô. Exemple:
- {{{
- #!php
- <?php dcPostChapo('<h3>Chapô</h3> %s'); ?>
- }}}
- @param string s Chaine de substitution ('%s <hr />')
- */
- function dcPostChapo($s='%s <hr />')
- {
- printf($s,$GLOBALS['news']->getChapo());
- }
- /**
- @function dcPostAbstract
- Cette fonction affiche le chapô du billet s'il y en a un sinon elle affiche
- le contenu du billet. Si elle affiche le chapô, le paramètre '''l''' permet
- de définir un texte à afficher après le chapô. Dans le paramètre '''l''' la
- première chaîne %s indique le lien vers le billet et la seconde le titre
- du billet. On pourra donc par exemple faire ceci :
- {{{
- #!php
- <?php dcPostAbstract('%s','<p><a href="%s" title="Lire %s">Lire la suite</a></p>'); ?>
- }}}
- On notera que cette fonction trouve sa place dans un affichage de liste de
- billets, plutôt que dans l'affichage d'un seul billet.
- @param string s Chaîne de substitution du chapô ('%s')
- @param string l Chaîne affichée après le chapô ('<p><a href="%s" title="%s">Read next</a></p>')
- */
- function dcPostAbstract($s='%s',$l='<p><a href="%s" title="Read %s">Read next</a></p>')
- {
- global $news;
-
- if ($news->f('post_chapo') != '') {
- printf($s,$news->getChapo());
- printf($l,$news->getPermURL(),$news->f('post_titre'));
- } else {
- echo $news->getContent();
- }
- }
- /**
- @function dcPostAuthor
- Cette fonction affiche le nom canonique de l'auteur du billet. Le nom canonique
- est défini en fonction des informations données par le rédacteur. Si un pseudo
- est présent, il sera utilisé, sinon, le prénom et le nom seront utilisés.
- */
- function dcPostAuthor()
- {
- echo $GLOBALS['news']->getUserCN();
- }
- /**
- @function dcPostDate
- Cette fonction affiche la date d'un billet. On peut changer le formatage
- de la date en changeant le paramètre '''format'''. Par défaut, ce paramètre
- utilisera le format donné dans la configuration du blog.
- Voir [http://fr2.php.net/manual/fr/function.strftime.php strftime] pour les
- formats possible de date.
- @param string format Masque de formatage de la date ('')
- */
- function dcPostDate($format='')
- {
- if ($format) {
- echo dt::str($format,strtotime($GLOBALS['news']->f('post_dt')));
- } else {
- echo $GLOBALS['news']->getLDate();
- }
- }
- /**
- @function dcPostTime
- Cette fonction affiche l'heure d'un billet en utilisant le format donné dans la
- configuration du blog.
- */
- function dcPostTime($format='')
- {
- echo $GLOBALS['news']->getLTime();
- }
- /**
- @function dcPostLang
- Cette fonction affiche l'attribut lang="" pour un billet. Vous pouvez le
- positionner dans n'importe quel marqueur. Rien n'est affiché si la langue
- n'est pas présente.
- */
- function dcPostLang()
- {
- $lang = $GLOBALS['news']->f('post_lang');
- if ($lang != '') {
- echo 'lang="'.$lang.'"';
- }
- }
- /**
- @function dcPostNbComments
- Cette fonction affiche le nombre de commentaires d'un billet.
- Les trois arguments permettent de définir le texte affiché pour
- respectivement aucun, un ou plusieurs commentaires. Par exemple:
- {{{
- #!php
- <?php dcPostNbComments('aucun commentaire','un commentaire',
- '%s commentaires'); ?>
- }}}
- @param string zero Texte affiché pour 0 commentaire
- @param string one Texte affiché pour 1 commentaire
- @param string more Texte affiché plusieurs commentaires
- */
- function dcPostNbComments($zero,$one,$more)
- {
- $nb = $GLOBALS['news']->f('nb_comment');
-
- if($nb == 0) {
- echo $zero;
- } elseif($nb == 1) {
- echo $one;
- } elseif($nb > 1) {
- printf($more,$nb);
- }
- }
- /**
- @function dcPostNbTrackbacks
- Cette fonction affiche le nombre de trackbacks d'un billet.
- Les trois arguments permettent de définir le texte affiché pour
- respectivement aucun, un ou plusieurs trackbacks. Par exemple:
- {{{
- #!php
- <?php dcPostNbTrackbacks('aucun trackback','un trackback',
- '%s trackbacks'); ?>
- @param string zero Texte affiché pour 0 trackback
- @param string one Texte affiché pour 1 trackback
- @param string more Texte affiché plusieurs trackbacks
- */
- function dcPostNbTrackbacks($zero,$one,$more)
- {
- $nb = $GLOBALS['news']->f('nb_trackback');
-
- if($nb == 0) {
- echo $zero;
- } elseif($nb == 1) {
- echo $one;
- } elseif($nb > 1) {
- printf($more,$nb);
- }
- }
- /**
- @function dcPostNext
- Cette fonction permet d'afficher une information sur le billet suivant ou
- précédent. Le paramètre '''dir''' indique la direction dans laquelle chercher
- le billet (1 pour suivant, -1 pour précédent). Le paramètre '''s''' est une
- chaîne de substitution permettant de formater l'affichage des informations
- concernant le billet. Il y a trois paramètres à cette chaîne, donnant
- respectivement l'ID, le titre et l'url du billet suivant ou précédent. Cette
- fonction n'affiche rien si elle ne trouve pas de billet.
- On peut l'utiliser pour l'affichage individuel des billets, par exemple:
- {{{
- #!php
- <?php dcPostNext(1,'<a href="%3$s" title="%2$s">Billet suivant</a>'); ?>
- }}}
- Ceci affichera un lien vers le billet suivant s'il existe et ayant pour titre le
- titre du billet.
- @param integer dir Direction (1)
- @param string s Chaîne de substitution ('%1$s %2$s %3$s')
- */
- function dcPostNext($dir,$s='%1$s %2$s %3$s')
- {
- global $blog;
-
- if ($dir > 0 && (empty($GLOBALS['rs_next'])) || empty($GLOBALS['rs_prev'])) {
- return false;
- }
-
- $rs = ($dir > 0) ? $GLOBALS['rs_next'] : $GLOBALS['rs_prev'];
-
- if (!$rs->isEmpty())
- {
- $id = $rs->f('post_id');
- $titre = $rs->f('post_titre');
- $date = $rs->f('post_dt');
-
- $ts = strtotime($date);
-
- $url = sprintf($blog->front_url['post'],date('Y',$ts),
- date('m',$ts),date('d',$ts),$id,$blog->str2url($titre));
-
- printf($s,$id,$titre,$url);
- }
- }
- /**
- @function dcPostOpenComments
- Cette fonction indique si les commentaires sont autorisés pour un billet.
- On peut l'utiliser dans un test par exemple.
- @return boolean
- */
- function dcPostOpenComments()
- {
- return (boolean) $GLOBALS['news']->openComment();
- }
- /**
- @function dcPostOpenTrackbacks
- Cette fonction indique si les trackbacks sont autorisés pour un billet.
- On peut l'utiliser dans un test par exemple.
- @return boolean
- */
- function dcPostOpenTrackbacks()
- {
- return (boolean) $GLOBALS['news']->openTb();
- }
- /**
- @function dcPostTrackbackURI
- Cette fonction affiche l'URI à pinger pour faire un trackback sur un billet.
- */
- function dcPostTrackbackURI()
- {
- echo
- 'http://'.$_SERVER['HTTP_HOST'].
- dc_trackback_uri.'?id='.$GLOBALS['news']->f('post_id');
- }
- /**
- @function dcPostTrackbackAutoDiscovery
- Cette fonction affiche le commentaire HTML contenant les informations
- RDF permettant de réaliser la découverte automatique de l'URL de trackback.
- On l'utilisera dans l'en-tête du document de préférence.
- */
- function dcPostTrackbackAutoDiscovery()
- {
- if ($GLOBALS['mode'] == 'post' && $GLOBALS['news']->openTb())
- {
- $tb_url = 'http://'.$_SERVER['HTTP_HOST'].
- dc_trackback_uri.'?id='.$GLOBALS['news']->f('post_id');
-
- echo '<!--'."\n".
- '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n".
- ' xmlns:dc="http://purl.org/dc/elements/1.1/"'."\n".
- ' xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">'."\n".
- '<rdf:Description'."\n".
- ' rdf:about="http://'.$_SERVER['HTTP_HOST'].$GLOBALS['news']->getPermURL().'"'."\n".
- ' dc:identifier="http://'.$_SERVER['HTTP_HOST'].$GLOBALS['news']->getPermURL().'"'."\n".
- ' dc:title="'.$GLOBALS['news']->f('post_titre').'"'."\n".
- ' trackback:ping="'.$tb_url.'" />'."\n".
- '</rdf:RDF>'."\n".
- '-->'."\n";
- }
- }
- # Commentaires ############################################
- /**
- @doc
- === Traitement des commentaires ===
- Le traitement des commentaires est régis par la même système de boucle
- que les billets. Les fonctions suivantes ne s'utilisent que dans une
- boucle de commentaires sauf '''dcCommentFormError''' et '''dcCommentFormValue'''
- qui peuvent être utilisés partout.
- Exemple d'une boucle de commentaires affichant son contenu
- {{{
- #!php
- <?php while ($comments->fetch()) : ?>
- <?php dcCommentContent(); ?>
- <?php endwhile; ?>
- }}}
- */
- /**
- @function dcCommentContent
- Cette fonction affiche le contenu d'un commentaire.
- */
- function dcCommentContent()
- {
- echo $GLOBALS['comments']->xGetContent();
- }
- /**
- @function dcCommentContentTransform
- Cette fonction affiche un commentaire de type trackback avec le lien vers
- l'article dans le corps du commentaire (autour du titre). Sinon, il affiche
- que le commentaire comme dcCommentContent().
- */
- function dcCommentContentTransform()
- {
- dcCommentContent();
- }
- /**
- @function dcCommentDate
- Cette fonction affiche la date d'un commentaire. On peut changer le formatage
- de la date en changeant le paramètre '''format'''. Par défaut, ce paramètre
- utilisera le format donné dans la configuration du blog.
- Voir [http://fr2.php.net/manual/fr/function.strftime.php strftime] pour les
- formats possibles de date.
- @param string format Masque de formatage de la date ('')
- */
- function dcCommentDate($format='')
- {
- if ($format) {
- echo dt::str($format,strtotime($GLOBALS['comments']->f('comment_dt')));
- } else {
- echo $GLOBALS['comments']->getLDate();
- }
- }
- /**
- @function dcCommentTime
- Cette fonction affiche l'heure d'un commentaire en utilisant le format donné
- dans la configuration du blog.
- */
- function dcCommentTime()
- {
- echo $GLOBALS['comments']->getLTime();
- }
- /**
- @function dcCommentAuthor
- Cette fonction affiche le pseudo de l'auteur d'un commentaire. Avec un lien si
- l'auteur a laissé une URL
- @param string s Chaîne de substitution, uniquement si l'auteur a laissé une URL
- */
- function dcCommentAuthor($s='<a href="%1$s">%2$s</a>')
- {
- if (($link = $GLOBALS['comments']->auteurSite()) !== false) {
- printf($s,$link,$GLOBALS['comments']->f('comment_auteur'));
- } else {
- echo $GLOBALS['comments']->f('comment_auteur');
- }
- }
- /**
- @function dcCommentID
- Cette fonction affiche l'ID d'un commentaire
- */
- function dcCommentID()
- {
- echo $GLOBALS['comments']->f('comment_id');
- }
- /**
- @function dcCommentAuthorLink
- Cette fonction affiche le nom de l'auteur avec un lien
- vers son adresse email s'il en a laissé une.
- @param string s Chaîne de substitution
- */
- function dcCommentAuthorLink($s='%s')
- {
- if (($link = $GLOBALS['comments']->auteurLink()) !== false) {
- printf($s,$link);
- }
- }
- /**
- @function dcCommentAuthorSite
- Cette fonction affiche un lien vers le site de l'auteur d'un commentaire
- s'il en a laissé un.
- @param string s Chaîne de substitution
- */
- function dcCommentAuthorSite($s='%s')
- {
- if (($link = $GLOBALS['comments']->auteurSite()) !== false) {
- printf($s,$link);
- }
- }
- /**
- @function dcCommentPreview
- Cette fonction affiche la prévisualisation d'un commentaire. Elle affiche les
- émoticones et le formatage tel qu'il sera affiché.
- */
- function dcCommentPreview()
- {
- if (!empty($GLOBALS['in_content'])) {
- if (dc_use_smilies) {
- echo $GLOBALS['blog']->addSmilies($GLOBALS['in_content']);
- } else {
- echo $GLOBALS['in_content'];
- }
- }
- }
- /**
- @function dcCommentFormError
- Cette fonction affiche les erreurs qui ont pu se produire lors de la soumission
- d'un commentaire. Il est conseillé de la laisser.
- @param string s Chaîne de substitution
- */
- function dcCommentFormError($s='%s')
- {
- if (!empty($GLOBALS['form_err'])) {
- printf($s,$GLOBALS['form_err']);
- }
- }
- /**
- @function dcCommentFormMsg
- Cette fonction affiche un message après la soumission d'un commentaire. Le seul
- message actuellement est la confirmation de la réception du commentaire quand
- ceux-ci sont modérés. Si vous ne modérez pas les commentaires, cette fonction
- peut ne pas être utilisée.
- @param string s Chaîne de substitution
- */
- function dcCommentFormMsg($s='%s')
- {
- if (!empty($GLOBALS['form_msg'])) {
- printf($s,$GLOBALS['form_msg']);
- }
- }
- /**
- @function dcCommentFormValue
- Cette fonction affiche la valeur d'une variable pour le formulaire de
- commentaire. Elle permet par exemple de rappeler les valeurs en cas d'erreur.
- Les valeurs possibles de '''var''' sont :
- * c_nom : nom
- * c_mail : adresse email
- * c_site : site web
- * c_content : contenu du commentaire
- On pourra utiliser par exemple:
- {{{
- #!php
- <input name="c_nom" id="c_nom" type="text" size="30" maxlength="255"
- value="<?php dcCommentFormValue('c_nom'); ?>" />
- }}}
- @param string var Nom de la variable à afficher
- */
- function dcCommentFormValue($var)
- {
- echo htmlspecialchars($GLOBALS[$var]);
- }
- /**
- @function dcCommentFormRedir
- Cette fonction donne l'url vers laquelle on redirige le client une fois
- le commentaire posté.
- */
- function dcCommentFormRedir()
- {
- echo util::getPageURL();
- }
- /**
- @function dcCommentIsTrackBack
- Cette fonction indique si un commentaire est un trackback.
- @return boolean
- */
- function dcCommentIsTrackBack()
- {
- return (boolean) $GLOBALS['comments']->f('comment_trackback');
- }
- /**
- @function dcCommentTrackBackURL
- Cette fonction retourne l'URL du trackback. Il s'agit en fait de l'URL
- du site dans le commentaire. Elle fait simplement un test supplémentaire
- pour vérifier que le commentaire est bien un trackback.
- */
- function dcCommentTrackBackURL($s='%s')
- {
- if ($GLOBALS['comments']->f('comment_trackback') == 1)
- {
- printf($s,$GLOBALS['comments']->f('comment_site'));
- }
- }
- # Trackbacks ##############################################
- /**
- @doc
- === Traitement des trackbacks ===
- Le traitement des trackbacks suit le même fonctionnement que les
- commentaires. Les fonctions suivantes ne s'utilisent que dans une
- boucle de trackbacks.
- Exemple d'une boucle de trackbacks affichant son contenu
- {{{
- #!php
- <?php while ($trackbacks->fetch()) : ?>
- <?php dcTBContent(); ?>
- <?php endwhile; ?>
- }}}
- */
- /**
- @function dcTBContent
- Cette fonction affiche un trackback avec le lien vers
- l'article dans le corps du commentaire (autour du titre).
- */
- function dcTBContent()
- {
- $content = $GLOBALS['trackbacks']->xGetContent();
- $link = '<a href="'.$GLOBALS['trackbacks']->auteurSite().'" rel="nofollow">$2</a>';
-
- echo preg_replace('|(<p><strong>)(.*)(</strong></p>)|msU','$1'.$link.'$3',$content);
- }
- /**
- @function dcTBDate
- Cette fonction affiche la date d'un trackback. On peut changer le formatage
- de la date en changeant le paramètre '''format'''. Par défaut, ce paramètre
- utilisera le format donné dans la configuration du blog.
- Voir [http://fr2.php.net/manual/fr/function.strftime.php strftime] pour les
- formats possibles de date.
- @param string format Masque de formatage de la date ('')
- */
- function dcTBDate($format='')
- {
- if ($format) {
- echo dt::str($format,strtotime($GLOBALS['trackbacks']->f('comment_dt')));
- } else {
- echo $GLOBALS['trackbacks']->getLDate();
- }
- }
- /**
- @function dcTBTime
- Cette fonction affiche l'heure d'un trackback en utilisant le format donné
- dans la configuration du blog.
- */
- function dcTBTime()
- {
- echo $GLOBALS['trackbacks']->getLTime();
- }
- /**
- @function dcTBAuthor
- Cette fonction affiche le nom de l'auteur d'un trackback.
- */
- function dcTBAuthor()
- {
- echo $GLOBALS['trackbacks']->f('comment_auteur');
- }
- /**
- @function dcTBID
- Cette fonction affiche l'ID d'un trackback
- */
- function dcTBID()
- {
- echo $GLOBALS['trackbacks']->f('comment_id');
- }
- ?>
|