[ Index ] |
|
Code source de Dotclear 1.2.5 |
1 <?php 2 # ***** BEGIN LICENSE BLOCK ***** 3 # This file is part of DotClear. 4 # Copyright (c) 2004 Olivier Meunier and contributors. All rights 5 # reserved. 6 # 7 # DotClear is free software; you can redistribute it and/or modify 8 # it under the terms of the GNU General Public License as published by 9 # the Free Software Foundation; either version 2 of the License, or 10 # (at your option) any later version. 11 # 12 # DotClear is distributed in the hope that it will be useful, 13 # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 # GNU General Public License for more details. 16 # 17 # You should have received a copy of the GNU General Public License 18 # along with DotClear; if not, write to the Free Software 19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 # 21 # ***** END LICENSE BLOCK ***** 22 23 /** 24 @doc 25 26 == Fonctionnement des gabarits == 27 28 === Introduction === 29 30 Le système de modèle de page de DotClear n'est pas ce qui se fait de plus 31 simple à l'usage mais reste abordable pour peu de bien lire la 32 documentation. 33 34 Le fonctionnement est très simple, il s'agit de fonctions PHP qui se 35 chargent d'afficher l'information qu'on leur demande. 36 37 Parfois un motif est utilisé pour formater l'information affichée. Ce motif 38 constitue une marque de substitution, généralement identifiée par %s. Pour de 39 plus amples détails, suivre la documentation de la fonction 40 PHP|PHP Hypertext Processor, 41 [http://fr2.php.net/manual/fr/function.sprintf.php sprintf]. 42 Pour chaque fonction utilisant un motif, nous expliquerons comment le remplir. 43 */ 44 45 /** 46 @doc 47 48 === Les fonctions informatives === 49 50 Les fonctions suivantes permettent d'afficher des renseignements divers sur 51 le blog ou les billets. 52 */ 53 54 55 /** 56 @function dcInfo 57 58 Fonction affichant une information sur le blog. 59 La propriété '''name''' peut prendre les valeurs suivantes : 60 61 * name : non du weblogue 62 * theme : chemin vers le répertoire du thème 63 * img : chemin vers les images 64 * url : URL de la home page du blog 65 * rss : chemin vers le fil RSS 66 * atom : chemin vers le fil Atom 67 * search : chemin de l'action pour le moteur de rechercher 68 * logo : chemin vers l'image du logo 69 * encoding : Encodage des caractères 70 * lang : langue principale du weblogue 71 72 Exemple : 73 74 {{{ 75 #!php 76 <h1><?php dcInfo(); ?></h1> 77 78 <a href="<?php dcInfo('rss'); ?>">fil rss</a> 79 }}} 80 81 Note : vous pouvez faire un lien vers le fil RSS ou Atom d'une catégorie 82 très facilement en ajoutant l'identifiant de la catégorie à l'URL, comme 83 ceci par exemple : 84 85 {{{ 86 #!php 87 <a href="<?php dcInfo('rss'); ?>?cat=General">RSS général</a> 88 }}} 89 90 @param string name Nom de la propriété à afficher ('name') 91 */ 92 function dcInfo($name='name') 93 { 94 switch ($name) 95 { 96 case 'theme' : echo $GLOBALS['theme_uri'].$GLOBALS['__theme']; break; 97 case 'img' : echo $GLOBALS['img_path']; break; 98 case 'url' : echo dc_blog_url; break; 99 case 'rss' : echo dc_blog_rss; break; 100 case 'atom' : echo dc_blog_atom; break; 101 case 'search' : echo dc_blog_url; break; 102 case 'logo' : echo $GLOBALS['img_path'].'/dotclear_pw.png'; break; 103 case 'encoding' : echo dc_encoding; break; 104 case 'lang' : echo dc_default_lang; break; 105 default : echo dc_blog_name; 106 } 107 } 108 109 /** 110 @function dcDayDate 111 112 Cette fonction affiche la date du jour. Elle est utilisée dans la boucle 113 des billets et n'affiche la date que lors du premier billet du jour. Cela 114 permet d'afficher la date du jour au dessus de plusieurs billets du même 115 jour. 116 117 On peut entourer la date de marqueur ou de texte grâce à la chaîne 118 de substitution '''s''' passée en argument. Par exemple: 119 120 {{{ 121 #!php 122 <?php dcDayDate('<h2>%s</h2>'); ?> 123 }}} 124 125 @param string s Chaine de substition ('%s') 126 */ 127 function dcDayDate($s='%s') 128 { 129 if ($GLOBALS['news']->firstPostOfDay()) 130 { 131 printf($s,$GLOBALS['news']->getLDate()); 132 } 133 } 134 135 /** 136 @function dcCalendar 137 138 Cette fonction affiche un calendrier contextuel (mois, année, jour). 139 Le calendrier est un tableau dans une balise <div> dont la classe 140 CSS|Cascading Style Sheet est ''cal''. Les nom des jours sont indiqués avec des 141 cellules d'en-tête (th) et le titre avec (caption). 142 143 Exemple d'utilisation : 144 145 {{{ 146 #!php 147 <?php dcCalendar(); ?> 148 }}} 149 150 @param string block Chaine de substitution pour pour le tableau ('<div class="cal"><table summary="calendrier">%s</table></div>') 151 */ 152 function dcCalendar($block='<div class="cal"><table summary="calendrier">%s</table></div>') 153 { 154 global $year,$month,$day,$cat_id,$lang; 155 156 echo $GLOBALS['blog']->xCalendar($year,$month,$day,$cat_id,$lang,$block); 157 } 158 159 /** 160 @function dcHeadLinks 161 162 Cette fonction affiche les liens (link) dans l'en-tête du fichier HTML. 163 Elle génère automatiquement les liens de navigation dans le blog. Il 164 suffit de la placer dans l'en-tête du document : 165 166 {{{ 167 #!php 168 <head> 169 <?php dcHeadLinks(); ?> 170 </head> 171 }}} 172 */ 173 function dcHeadLinks() 174 { 175 global $blog, $cat_id, $rs_cat; 176 177 echo dcPostNext(1,'<link rel="next" href="%3$s" title="%2$s" />'."\n"); 178 echo dcPostNext(-1,'<link rel="previous" href="%3$s" title="%2$s" />'."\n"); 179 180 if (!$rs_cat->isEmpty() && !$cat_id) 181 { 182 while (!$rs_cat->EOF()) 183 { 184 if ($rs_cat->f('nb_post') > 0) 185 { 186 $id = $rs_cat->f('cat_libelle_url'); 187 $libelle = $rs_cat->f('cat_libelle'); 188 $lien = sprintf($blog->front_url['cat'],$id); 189 190 echo '<link rel="section" href="'.$lien.'" title="'.$libelle.'" />'."\n"; 191 } 192 $rs_cat->moveNext(); 193 } 194 $rs_cat->moveStart(); 195 } 196 197 $arry_months = $GLOBALS['arry_months']; 198 $comp_url = ''; 199 if ($cat_id) { 200 $comp_url = $cat_id.'/'; 201 } 202 foreach ($arry_months as $ts => $d) 203 { 204 $titre = dt::str('%B %Y',$ts); 205 $url = sprintf($blog->front_url['archive'],$comp_url.date('Y',$ts),date('m',$ts)); 206 echo '<link rel="archive" href="'.$url.'" title="'.$titre.'" />'."\n"; 207 } 208 209 if ($GLOBALS['mode'] == 'home') 210 { 211 echo $GLOBALS['news']->getHeadLinks(); 212 } 213 } 214 215 /** 216 @function dcSinglePostTitle 217 218 Cette fonction affiche le titre d'un billet si on est sur une page présentant 219 un billet (/blog/yyyy/mm/dd/titre par exemple). 220 221 On l'utilisera dans la balise <title> du document. Par exemple: 222 223 {{{ 224 #!php 225 <title><?php dcSinglePostTitle(); ?></title> 226 }}} 227 228 @param string s Chaîne de substitution ('%s - ') 229 */ 230 function dcSinglePostTitle($s='%s - ') 231 { 232 if ($GLOBALS['mode'] == 'post') { 233 printf($s,$GLOBALS['news']->f('post_titre')); 234 } 235 } 236 237 /** 238 @function dcSingleCatTitle 239 240 Cette fonction affiche le nom de la catégorie s'il y a lieu de l'afficher. On peut 241 l'utiliser dans le titre, comme '''dcSinglePostTitle'''. 242 243 @param string s Chaîne de substitution ('%s - ') 244 */ 245 function dcSingleCatTitle($s='%s - ') 246 { 247 if ($GLOBALS['cat_id'] != '') { 248 printf($s,$GLOBALS['news']->f('cat_libelle')); 249 } 250 } 251 252 /** 253 @function dcSingleMonthTitle 254 255 Cette fonction affiche le mois et l'année en cours s'il y a lieu de l'afficher. 256 S'utilise aussi dans le titre comme '''dcSinglePostTitle'''. 257 258 @param string s Chaîne de substitution ('%s - ') 259 */ 260 function dcSingleMonthTitle($s='%s - ') 261 { 262 if ($GLOBALS['mode'] == 'month') { 263 $ts = strtotime($GLOBALS['year'].'-'.$GLOBALS['month'].'-01 00:00'); 264 printf($s,dt::str('%B %Y',$ts)); 265 } 266 } 267 268 /** 269 @function dcCustomTitle 270 271 Cette fonction affiche le contenu de la variable globale $dc_custom_title. 272 Cette variable peut-être assignée par un plugin. 273 274 @param string s Chaîne de substitution ('%s - ') 275 */ 276 function dcCustomTitle($s='%s - ') 277 { 278 if (!empty($GLOBALS['dc_custom_title'])) { 279 printf($s,$GLOBALS['dc_custom_title']); 280 } 281 } 282 283 /** 284 @doc 285 286 ==== Exemples d'usage des fonctions pour la balise <title> ==== 287 288 Voici un exemple de commun de balise <title> à partir des fonctions précédentes : 289 290 {{{ 291 #!php 292 <title><?php dcSinglePostTitle('%s - '); dcSingleCatTitle('%s - '); 293 dcSingleMonthTitle('%s - '); dcCustomTitle('%s - '); dcInfo(); ?></title> 294 }}} 295 */ 296 297 /** 298 @function dcLangList 299 300 Cette fonction affiche une liste des langues définies dans les billets. Les 301 langues s'affichent uniquement si au moins deux langues différentes existent. 302 Ceci permet d'offrir une navigation par langue dans le weblogue. 303 304 @param string block Chaine de substitution pour pour la liste ('<ul>%s</ul>') 305 @param string item Chaine de substitution pour un élément ('<li>%s</li>') 306 */ 307 function dcLangList($block='<ul>%s</ul>',$item='<li>%s</li>') 308 { 309 global $rs_lang,$lang,$blog; 310 311 if ($rs_lang->nbRow() > 1) 312 { 313 $res = ''; 314 while ($rs_lang->fetch()) 315 { 316 $lien = '<a href="'. 317 sprintf($blog->front_url['cat'],$rs_lang->f(0)).'">'. 318 $rs_lang->f(0).'</a>'; 319 320 if ($lang == $rs_lang->f(0)) { 321 $lien = '<strong>'.$lien.'</strong>'; 322 } 323 324 $res .= sprintf($item,$lien); 325 } 326 327 printf($block,$res); 328 } 329 } 330 331 /** 332 @function dcCatList 333 334 Cette fonction affiche une liste des catégories avec les liens pour y 335 accéder. La liste générée est une liste non ordonnée (<ul>), il est donc 336 très simple de la mettre en forme par la suite. 337 338 @param string block Chaine de substitution pour pour la liste ('<ul>%s</ul>') 339 @param string item Chaine de substitution pour un élément ('<li>%s</li>') 340 */ 341 function dcCatList($block='<ul>%s</ul>',$item='<li>%s</li>') 342 { 343 global $rs_cat, $cat_id, $lang, $blog; 344 345 $comp_url = ''; 346 347 if ($lang) { 348 $comp_url = $lang.'/'; 349 } 350 351 if (!$rs_cat->isEmpty()) 352 { 353 $res = ''; 354 355 while (!$rs_cat->EOF()) 356 { 357 if ($rs_cat->f('nb_post') > 0) 358 { 359 $id = $rs_cat->f('cat_libelle_url'); 360 $libelle = $rs_cat->f('cat_libelle'); 361 362 $lien = '<a href="'. 363 sprintf($blog->front_url['cat'],$comp_url.$id). 364 '">'.$libelle.'</a>'; 365 366 if ($cat_id == $id) { 367 $lien = '<strong>'.$lien.'</strong>'; 368 } 369 370 $res .= sprintf($item,$lien); 371 } 372 $rs_cat->moveNext(); 373 } 374 $rs_cat->moveStart(); 375 376 printf($block,$res); 377 } 378 } 379 380 /** 381 @function dcMonthsList 382 383 Cette fonction affiche la liste des mois contenant les archives. 384 Si on se trouve dans une catégorie, seuls les mois de cette catégorie 385 seront affichés. 386 387 @param string block Chaine de substitution pour pour la liste ('<ul>%s</ul>') 388 @param string item Chaine de substitution pour un élément ('<li>%s</li>') 389 */ 390 function dcMonthsList($block='<ul>%s</ul>',$item='<li>%s</li>') 391 { 392 global $arry_months, $month, $year, $cat_id, $lang, $blog; 393 394 $comp_url = ''; 395 396 if ($lang) { 397 $comp_url .= $lang.'/'; 398 } 399 400 if($cat_id) { 401 $comp_url .= $cat_id.'/'; 402 } 403 404 $res = ''; 405 406 foreach($arry_months as $ts => $d) 407 { 408 $titre = dt::str('%B %Y',$ts); 409 410 $url = sprintf($blog->front_url['archive'],$comp_url.date('Y',$ts),date('m',$ts)); 411 $lien = '<a href="'.$url.'">%s</a>'; 412 413 $liClass = ''; 414 415 if($year == date('Y',$ts) && $month == date('m',$ts)) { 416 $lien = '<strong>'.$lien.'</strong>'; 417 } 418 419 $res .= sprintf($item,sprintf($lien,$titre)); 420 } 421 422 if (count($arry_months) > 0) { 423 printf($block,$res); 424 } 425 } 426 427 /** 428 @function dcSelection 429 430 Cette fonction affiche une liste des billets sélectionnés, avec simplement 431 le titre et un lien vers le billet. L'affichage par défaut produira une liste, 432 vous pouvez l'appeler tout simplement par '''dcSelection()'''. 433 434 435 @param string block Chaine de substitution pour pour la liste ('<ul>%s</ul>') 436 @param string item Chaine de substitution pour un élément ('<li><a href="%2$s">%1$s</a></li>') 437 @param integer limit Nombre de titres à afficher (ilimité) 438 */ 439 function dcSelection($block='<ul>%s</ul>',$item='<li><a href="%2$s">%1$s</a></li>',$limit=NULL) 440 { 441 global $blog; 442 443 $rs = $blog->getLastNews($limit,'','post_dt DESC',true); 444 445 if (!$rs->isEmpty()) { 446 $res = ''; 447 while (!$rs->EOF()) { 448 $res .= sprintf($item,$rs->f('post_titre'),$rs->getPermURL()); 449 $rs->moveNext(); 450 } 451 printf($block,$res); 452 } 453 } 454 455 /** 456 @function dcSearchString 457 458 Cette fonction affiche la chaîne de recherche lorsque qu'une recherche vient d'être 459 effectuée. 460 461 @param string s Chaîne de substitution ('%s') 462 */ 463 function dcSearchString($s='%s') 464 { 465 if(!empty($_GET['q'])) { 466 printf($s,htmlspecialchars(stripslashes($_GET['q']))); 467 } 468 } 469 470 /** 471 @function dcAdminLink 472 473 Cette fonction affiche un lien vers l'espace d'administration du blog dans le 474 cas ou une session d'administration est ouverte (et seulement dans ce cas). 475 476 @param string s Chaine de substitution ('<ul><li><a href="%s">admin</a></li></ul>') 477 */ 478 function dcAdminLink($s='<ul><li><a href="%s">admin</a></li></ul>') 479 { 480 if (isset($_SESSION['sess_user_id']) && defined('DC_ECRIRE')) { 481 $url = dc_app_url.'/'.DC_ECRIRE.'/index.php'; 482 printf($s,$url); 483 } 484 } 485 486 487 # Billets ################################################# 488 /** 489 @doc 490 491 === Traitement des billets. === 492 493 Les fonctions suivantes doivent être utilisées uniquement dans un 494 contexte de billet. Cela signifie qu'on l'utilisera si '''$mode''' 495 vaut 'post' ou dans une boucle de billet. Exemple: 496 497 {{{ 498 #!php 499 <?php if ($mode == 'post') : ?> 500 on peut utiliser les fonctions. 501 <?php endif; ?> 502 }}} 503 504 L'affichage des listes de billets est géré par une boucle très simple 505 à mettre en place. Voici un exemple qui affiche le titre des billets : 506 507 {{{ 508 #!php 509 <?php while ($news->fetch()) : ?> 510 <h3><?php dcPostTitle(); ?></h3> 511 <?php endwhile; ?> 512 }}} 513 */ 514 515 /** 516 @function dcPostURL 517 518 Cette fonction affiche l'URI du billet, son permalien. On l'utilisera dans 519 l'affichage d'un billet (boucle ou pas). Par exemple: 520 521 {{{ 522 #!php 523 <a href="<?php dcPostURL(); ?>">lien permanent</a> 524 }}} 525 */ 526 function dcPostURL() 527 { 528 echo $GLOBALS['news']->getPermURL(); 529 } 530 531 /** 532 @function dcPostID 533 534 Cette fonction affiche l'ID du billet (son numéro identifiant unique). 535 */ 536 function dcPostID() 537 { 538 echo $GLOBALS['news']->f('post_id'); 539 } 540 541 /** 542 @function dcPostTitle 543 544 Cette fonction affiche le titre d'un billet, avec chaîne de substitution 545 possible. Exemple: 546 547 {{{ 548 #!php 549 <h2><?php dcPostTitle(); ?></h2> 550 }}} 551 */ 552 function dcPostTitle($s='%s') 553 { 554 printf($s,$GLOBALS['news']->f('post_titre')); 555 } 556 557 /** 558 @function dcPostCatTitle 559 560 Dans le contexte du billet, cette fonction affiche le nom de la catégorie 561 du billet. 562 */ 563 function dcPostCatTitle() 564 { 565 echo $GLOBALS['news']->f('cat_libelle'); 566 } 567 568 /** 569 @function dcPostCatURL 570 571 Cette fonction affiche l'URL de la catégorie d'un billet. Ne s'utilise que dans 572 le contexte d'un billet. Par exemple: 573 574 {{{ 575 #!php 576 <a href="<?php dcPostCarURL(); ?>"><?php dcPostCatTitle(); ?></a> 577 }}} 578 */ 579 function dcPostCatURL() 580 { 581 echo $GLOBALS['news']->getCatURL(); 582 } 583 584 /** 585 @function dcPostContent 586 587 Cette fonction affiche le contenu d'un billet (sans son chapô). On peut 588 limiter le nombre de mots affichés avec le paramère '''part'''. 589 Si '''part''' vaut 0 alors on affiche tout le billet. 590 591 @param integer part Nombre de mots à afficher 592 */ 593 function dcPostContent($part=0) 594 { 595 global $news; 596 597 if ($part > 0) { 598 echo $news->blog->getPart($news->f('post_content'),$part); 599 } else { 600 echo $news->getContent(); 601 } 602 } 603 604 /** 605 @function dcPostChapo 606 607 Cette fonction affiche le chapô d'un billet s'il existe, sinon elle 608 n'affiche rien. Le paramètre '''s''' permet d'ajouter des information lors 609 de l'affichage du chapô. Exemple: 610 611 {{{ 612 #!php 613 <?php dcPostChapo('<h3>Chapô</h3> %s'); ?> 614 }}} 615 616 @param string s Chaine de substitution ('%s <hr />') 617 */ 618 function dcPostChapo($s='%s <hr />') 619 { 620 printf($s,$GLOBALS['news']->getChapo()); 621 } 622 623 /** 624 @function dcPostAbstract 625 626 Cette fonction affiche le chapô du billet s'il y en a un sinon elle affiche 627 le contenu du billet. Si elle affiche le chapô, le paramètre '''l''' permet 628 de définir un texte à afficher après le chapô. Dans le paramètre '''l''' la 629 première chaîne %s indique le lien vers le billet et la seconde le titre 630 du billet. On pourra donc par exemple faire ceci : 631 632 {{{ 633 #!php 634 <?php dcPostAbstract('%s','<p><a href="%s" title="Lire %s">Lire la suite</a></p>'); ?> 635 }}} 636 637 On notera que cette fonction trouve sa place dans un affichage de liste de 638 billets, plutôt que dans l'affichage d'un seul billet. 639 640 @param string s Chaîne de substitution du chapô ('%s') 641 @param string l Chaîne affichée après le chapô ('<p><a href="%s" title="%s">Read next</a></p>') 642 */ 643 function dcPostAbstract($s='%s',$l='<p><a href="%s" title="Read %s">Read next</a></p>') 644 { 645 global $news; 646 647 if ($news->f('post_chapo') != '') { 648 printf($s,$news->getChapo()); 649 printf($l,$news->getPermURL(),$news->f('post_titre')); 650 } else { 651 echo $news->getContent(); 652 } 653 } 654 655 /** 656 @function dcPostAuthor 657 658 Cette fonction affiche le nom canonique de l'auteur du billet. Le nom canonique 659 est défini en fonction des informations données par le rédacteur. Si un pseudo 660 est présent, il sera utilisé, sinon, le prénom et le nom seront utilisés. 661 */ 662 function dcPostAuthor() 663 { 664 echo $GLOBALS['news']->getUserCN(); 665 } 666 667 /** 668 @function dcPostDate 669 670 Cette fonction affiche la date d'un billet. On peut changer le formatage 671 de la date en changeant le paramètre '''format'''. Par défaut, ce paramètre 672 utilisera le format donné dans la configuration du blog. 673 674 Voir [http://fr2.php.net/manual/fr/function.strftime.php strftime] pour les 675 formats possible de date. 676 677 @param string format Masque de formatage de la date ('') 678 */ 679 function dcPostDate($format='') 680 { 681 if ($format) { 682 echo dt::str($format,strtotime($GLOBALS['news']->f('post_dt'))); 683 } else { 684 echo $GLOBALS['news']->getLDate(); 685 } 686 } 687 688 /** 689 @function dcPostTime 690 691 Cette fonction affiche l'heure d'un billet en utilisant le format donné dans la 692 configuration du blog. 693 */ 694 function dcPostTime($format='') 695 { 696 echo $GLOBALS['news']->getLTime(); 697 } 698 699 /** 700 @function dcPostLang 701 702 Cette fonction affiche l'attribut lang="" pour un billet. Vous pouvez le 703 positionner dans n'importe quel marqueur. Rien n'est affiché si la langue 704 n'est pas présente. 705 */ 706 function dcPostLang() 707 { 708 $lang = $GLOBALS['news']->f('post_lang'); 709 if ($lang != '') { 710 echo 'lang="'.$lang.'"'; 711 } 712 } 713 714 /** 715 @function dcPostNbComments 716 717 Cette fonction affiche le nombre de commentaires d'un billet. 718 Les trois arguments permettent de définir le texte affiché pour 719 respectivement aucun, un ou plusieurs commentaires. Par exemple: 720 721 {{{ 722 #!php 723 <?php dcPostNbComments('aucun commentaire','un commentaire', 724 '%s commentaires'); ?> 725 }}} 726 727 @param string zero Texte affiché pour 0 commentaire 728 @param string one Texte affiché pour 1 commentaire 729 @param string more Texte affiché plusieurs commentaires 730 */ 731 function dcPostNbComments($zero,$one,$more) 732 { 733 $nb = $GLOBALS['news']->f('nb_comment'); 734 735 if($nb == 0) { 736 echo $zero; 737 } elseif($nb == 1) { 738 echo $one; 739 } elseif($nb > 1) { 740 printf($more,$nb); 741 } 742 } 743 744 /** 745 @function dcPostNbTrackbacks 746 747 Cette fonction affiche le nombre de trackbacks d'un billet. 748 Les trois arguments permettent de définir le texte affiché pour 749 respectivement aucun, un ou plusieurs trackbacks. Par exemple: 750 751 {{{ 752 #!php 753 <?php dcPostNbTrackbacks('aucun trackback','un trackback', 754 '%s trackbacks'); ?> 755 756 @param string zero Texte affiché pour 0 trackback 757 @param string one Texte affiché pour 1 trackback 758 @param string more Texte affiché plusieurs trackbacks 759 */ 760 function dcPostNbTrackbacks($zero,$one,$more) 761 { 762 $nb = $GLOBALS['news']->f('nb_trackback'); 763 764 if($nb == 0) { 765 echo $zero; 766 } elseif($nb == 1) { 767 echo $one; 768 } elseif($nb > 1) { 769 printf($more,$nb); 770 } 771 } 772 773 /** 774 @function dcPostNext 775 776 Cette fonction permet d'afficher une information sur le billet suivant ou 777 précédent. Le paramètre '''dir''' indique la direction dans laquelle chercher 778 le billet (1 pour suivant, -1 pour précédent). Le paramètre '''s''' est une 779 chaîne de substitution permettant de formater l'affichage des informations 780 concernant le billet. Il y a trois paramètres à cette chaîne, donnant 781 respectivement l'ID, le titre et l'url du billet suivant ou précédent. Cette 782 fonction n'affiche rien si elle ne trouve pas de billet. 783 784 On peut l'utiliser pour l'affichage individuel des billets, par exemple: 785 786 {{{ 787 #!php 788 <?php dcPostNext(1,'<a href="%3$s" title="%2$s">Billet suivant</a>'); ?> 789 }}} 790 791 Ceci affichera un lien vers le billet suivant s'il existe et ayant pour titre le 792 titre du billet. 793 794 @param integer dir Direction (1) 795 @param string s Chaîne de substitution ('%1$s %2$s %3$s') 796 */ 797 function dcPostNext($dir,$s='%1$s %2$s %3$s') 798 { 799 global $blog; 800 801 if ($dir > 0 && (empty($GLOBALS['rs_next'])) || empty($GLOBALS['rs_prev'])) { 802 return false; 803 } 804 805 $rs = ($dir > 0) ? $GLOBALS['rs_next'] : $GLOBALS['rs_prev']; 806 807 if (!$rs->isEmpty()) 808 { 809 $id = $rs->f('post_id'); 810 $titre = $rs->f('post_titre'); 811 $date = $rs->f('post_dt'); 812 813 $ts = strtotime($date); 814 815 $url = sprintf($blog->front_url['post'],date('Y',$ts), 816 date('m',$ts),date('d',$ts),$id,$blog->str2url($titre)); 817 818 printf($s,$id,$titre,$url); 819 } 820 } 821 822 /** 823 @function dcPostOpenComments 824 825 Cette fonction indique si les commentaires sont autorisés pour un billet. 826 On peut l'utiliser dans un test par exemple. 827 828 @return boolean 829 */ 830 function dcPostOpenComments() 831 { 832 return (boolean) $GLOBALS['news']->openComment(); 833 } 834 835 /** 836 @function dcPostOpenTrackbacks 837 838 Cette fonction indique si les trackbacks sont autorisés pour un billet. 839 On peut l'utiliser dans un test par exemple. 840 841 @return boolean 842 */ 843 function dcPostOpenTrackbacks() 844 { 845 return (boolean) $GLOBALS['news']->openTb(); 846 } 847 848 /** 849 @function dcPostTrackbackURI 850 851 Cette fonction affiche l'URI à pinger pour faire un trackback sur un billet. 852 */ 853 function dcPostTrackbackURI() 854 { 855 echo 856 'http://'.$_SERVER['HTTP_HOST']. 857 dc_trackback_uri.'?id='.$GLOBALS['news']->f('post_id'); 858 } 859 860 /** 861 @function dcPostTrackbackAutoDiscovery 862 863 Cette fonction affiche le commentaire HTML contenant les informations 864 RDF permettant de réaliser la découverte automatique de l'URL de trackback. 865 On l'utilisera dans l'en-tête du document de préférence. 866 */ 867 function dcPostTrackbackAutoDiscovery() 868 { 869 if ($GLOBALS['mode'] == 'post' && $GLOBALS['news']->openTb()) 870 { 871 $tb_url = 'http://'.$_SERVER['HTTP_HOST']. 872 dc_trackback_uri.'?id='.$GLOBALS['news']->f('post_id'); 873 874 echo '<!--'."\n". 875 '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n". 876 ' xmlns:dc="http://purl.org/dc/elements/1.1/"'."\n". 877 ' xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">'."\n". 878 '<rdf:Description'."\n". 879 ' rdf:about="http://'.$_SERVER['HTTP_HOST'].$GLOBALS['news']->getPermURL().'"'."\n". 880 ' dc:identifier="http://'.$_SERVER['HTTP_HOST'].$GLOBALS['news']->getPermURL().'"'."\n". 881 ' dc:title="'.$GLOBALS['news']->f('post_titre').'"'."\n". 882 ' trackback:ping="'.$tb_url.'" />'."\n". 883 '</rdf:RDF>'."\n". 884 '-->'."\n"; 885 } 886 } 887 888 # Commentaires ############################################ 889 /** 890 @doc 891 892 === Traitement des commentaires === 893 894 Le traitement des commentaires est régis par la même système de boucle 895 que les billets. Les fonctions suivantes ne s'utilisent que dans une 896 boucle de commentaires sauf '''dcCommentFormError''' et '''dcCommentFormValue''' 897 qui peuvent être utilisés partout. 898 899 Exemple d'une boucle de commentaires affichant son contenu 900 901 {{{ 902 #!php 903 <?php while ($comments->fetch()) : ?> 904 <?php dcCommentContent(); ?> 905 <?php endwhile; ?> 906 }}} 907 */ 908 909 /** 910 @function dcCommentContent 911 912 Cette fonction affiche le contenu d'un commentaire. 913 */ 914 function dcCommentContent() 915 { 916 echo $GLOBALS['comments']->xGetContent(); 917 } 918 919 /** 920 @function dcCommentContentTransform 921 922 Cette fonction affiche un commentaire de type trackback avec le lien vers 923 l'article dans le corps du commentaire (autour du titre). Sinon, il affiche 924 que le commentaire comme dcCommentContent(). 925 */ 926 function dcCommentContentTransform() 927 { 928 dcCommentContent(); 929 } 930 931 /** 932 @function dcCommentDate 933 934 Cette fonction affiche la date d'un commentaire. On peut changer le formatage 935 de la date en changeant le paramètre '''format'''. Par défaut, ce paramètre 936 utilisera le format donné dans la configuration du blog. 937 938 Voir [http://fr2.php.net/manual/fr/function.strftime.php strftime] pour les 939 formats possibles de date. 940 941 @param string format Masque de formatage de la date ('') 942 */ 943 function dcCommentDate($format='') 944 { 945 if ($format) { 946 echo dt::str($format,strtotime($GLOBALS['comments']->f('comment_dt'))); 947 } else { 948 echo $GLOBALS['comments']->getLDate(); 949 } 950 } 951 952 /** 953 @function dcCommentTime 954 955 Cette fonction affiche l'heure d'un commentaire en utilisant le format donné 956 dans la configuration du blog. 957 */ 958 function dcCommentTime() 959 { 960 echo $GLOBALS['comments']->getLTime(); 961 } 962 963 /** 964 @function dcCommentAuthor 965 966 Cette fonction affiche le pseudo de l'auteur d'un commentaire. Avec un lien si 967 l'auteur a laissé une URL 968 969 @param string s Chaîne de substitution, uniquement si l'auteur a laissé une URL 970 */ 971 function dcCommentAuthor($s='<a href="%1$s">%2$s</a>') 972 { 973 if (($link = $GLOBALS['comments']->auteurSite()) !== false) { 974 printf($s,$link,$GLOBALS['comments']->f('comment_auteur')); 975 } else { 976 echo $GLOBALS['comments']->f('comment_auteur'); 977 } 978 } 979 980 /** 981 @function dcCommentID 982 983 Cette fonction affiche l'ID d'un commentaire 984 */ 985 function dcCommentID() 986 { 987 echo $GLOBALS['comments']->f('comment_id'); 988 } 989 990 /** 991 @function dcCommentAuthorLink 992 993 Cette fonction affiche le nom de l'auteur avec un lien 994 vers son adresse email s'il en a laissé une. 995 996 @param string s Chaîne de substitution 997 */ 998 function dcCommentAuthorLink($s='%s') 999 { 1000 if (($link = $GLOBALS['comments']->auteurLink()) !== false) { 1001 printf($s,$link); 1002 } 1003 } 1004 1005 /** 1006 @function dcCommentAuthorSite 1007 1008 Cette fonction affiche un lien vers le site de l'auteur d'un commentaire 1009 s'il en a laissé un. 1010 1011 @param string s Chaîne de substitution 1012 */ 1013 function dcCommentAuthorSite($s='%s') 1014 { 1015 if (($link = $GLOBALS['comments']->auteurSite()) !== false) { 1016 printf($s,$link); 1017 } 1018 } 1019 1020 /** 1021 @function dcCommentPreview 1022 1023 Cette fonction affiche la prévisualisation d'un commentaire. Elle affiche les 1024 émoticones et le formatage tel qu'il sera affiché. 1025 */ 1026 function dcCommentPreview() 1027 { 1028 if (!empty($GLOBALS['in_content'])) { 1029 if (dc_use_smilies) { 1030 echo $GLOBALS['blog']->addSmilies($GLOBALS['in_content']); 1031 } else { 1032 echo $GLOBALS['in_content']; 1033 } 1034 } 1035 } 1036 1037 /** 1038 @function dcCommentFormError 1039 1040 Cette fonction affiche les erreurs qui ont pu se produire lors de la soumission 1041 d'un commentaire. Il est conseillé de la laisser. 1042 1043 @param string s Chaîne de substitution 1044 */ 1045 function dcCommentFormError($s='%s') 1046 { 1047 if (!empty($GLOBALS['form_err'])) { 1048 printf($s,$GLOBALS['form_err']); 1049 } 1050 } 1051 1052 /** 1053 @function dcCommentFormMsg 1054 1055 Cette fonction affiche un message après la soumission d'un commentaire. Le seul 1056 message actuellement est la confirmation de la réception du commentaire quand 1057 ceux-ci sont modérés. Si vous ne modérez pas les commentaires, cette fonction 1058 peut ne pas être utilisée. 1059 1060 @param string s Chaîne de substitution 1061 */ 1062 function dcCommentFormMsg($s='%s') 1063 { 1064 if (!empty($GLOBALS['form_msg'])) { 1065 printf($s,$GLOBALS['form_msg']); 1066 } 1067 } 1068 1069 /** 1070 @function dcCommentFormValue 1071 1072 Cette fonction affiche la valeur d'une variable pour le formulaire de 1073 commentaire. Elle permet par exemple de rappeler les valeurs en cas d'erreur. 1074 Les valeurs possibles de '''var''' sont : 1075 1076 * c_nom : nom 1077 * c_mail : adresse email 1078 * c_site : site web 1079 * c_content : contenu du commentaire 1080 1081 On pourra utiliser par exemple: 1082 1083 {{{ 1084 #!php 1085 <input name="c_nom" id="c_nom" type="text" size="30" maxlength="255" 1086 value="<?php dcCommentFormValue('c_nom'); ?>" /> 1087 }}} 1088 1089 @param string var Nom de la variable à afficher 1090 */ 1091 function dcCommentFormValue($var) 1092 { 1093 echo htmlspecialchars($GLOBALS[$var]); 1094 } 1095 1096 /** 1097 @function dcCommentFormRedir 1098 1099 Cette fonction donne l'url vers laquelle on redirige le client une fois 1100 le commentaire posté. 1101 */ 1102 function dcCommentFormRedir() 1103 { 1104 echo util::getPageURL(); 1105 } 1106 1107 /** 1108 @function dcCommentIsTrackBack 1109 1110 Cette fonction indique si un commentaire est un trackback. 1111 1112 @return boolean 1113 */ 1114 function dcCommentIsTrackBack() 1115 { 1116 return (boolean) $GLOBALS['comments']->f('comment_trackback'); 1117 } 1118 1119 /** 1120 @function dcCommentTrackBackURL 1121 1122 Cette fonction retourne l'URL du trackback. Il s'agit en fait de l'URL 1123 du site dans le commentaire. Elle fait simplement un test supplémentaire 1124 pour vérifier que le commentaire est bien un trackback. 1125 */ 1126 function dcCommentTrackBackURL($s='%s') 1127 { 1128 if ($GLOBALS['comments']->f('comment_trackback') == 1) 1129 { 1130 printf($s,$GLOBALS['comments']->f('comment_site')); 1131 } 1132 } 1133 1134 # Trackbacks ############################################## 1135 /** 1136 @doc 1137 1138 === Traitement des trackbacks === 1139 1140 Le traitement des trackbacks suit le même fonctionnement que les 1141 commentaires. Les fonctions suivantes ne s'utilisent que dans une 1142 boucle de trackbacks. 1143 1144 Exemple d'une boucle de trackbacks affichant son contenu 1145 1146 {{{ 1147 #!php 1148 <?php while ($trackbacks->fetch()) : ?> 1149 <?php dcTBContent(); ?> 1150 <?php endwhile; ?> 1151 }}} 1152 */ 1153 1154 /** 1155 @function dcTBContent 1156 1157 Cette fonction affiche un trackback avec le lien vers 1158 l'article dans le corps du commentaire (autour du titre). 1159 */ 1160 function dcTBContent() 1161 { 1162 $content = $GLOBALS['trackbacks']->xGetContent(); 1163 $link = '<a href="'.$GLOBALS['trackbacks']->auteurSite().'" rel="nofollow">$2</a>'; 1164 1165 echo preg_replace('|(<p><strong>)(.*)(</strong></p>)|msU','$1'.$link.'$3',$content); 1166 } 1167 1168 /** 1169 @function dcTBDate 1170 1171 Cette fonction affiche la date d'un trackback. On peut changer le formatage 1172 de la date en changeant le paramètre '''format'''. Par défaut, ce paramètre 1173 utilisera le format donné dans la configuration du blog. 1174 1175 Voir [http://fr2.php.net/manual/fr/function.strftime.php strftime] pour les 1176 formats possibles de date. 1177 1178 @param string format Masque de formatage de la date ('') 1179 */ 1180 function dcTBDate($format='') 1181 { 1182 if ($format) { 1183 echo dt::str($format,strtotime($GLOBALS['trackbacks']->f('comment_dt'))); 1184 } else { 1185 echo $GLOBALS['trackbacks']->getLDate(); 1186 } 1187 } 1188 1189 /** 1190 @function dcTBTime 1191 1192 Cette fonction affiche l'heure d'un trackback en utilisant le format donné 1193 dans la configuration du blog. 1194 */ 1195 function dcTBTime() 1196 { 1197 echo $GLOBALS['trackbacks']->getLTime(); 1198 } 1199 1200 /** 1201 @function dcTBAuthor 1202 1203 Cette fonction affiche le nom de l'auteur d'un trackback. 1204 */ 1205 function dcTBAuthor() 1206 { 1207 echo $GLOBALS['trackbacks']->f('comment_auteur'); 1208 } 1209 1210 /** 1211 @function dcTBID 1212 1213 Cette fonction affiche l'ID d'un trackback 1214 */ 1215 function dcTBID() 1216 { 1217 echo $GLOBALS['trackbacks']->f('comment_id'); 1218 } 1219 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Fri Feb 23 21:40:15 2007 | par Balluche grâce à PHPXref 0.7 |