Changeset 241
- Timestamp:
- 09/29/08 08:14:33 (15 years ago)
- Location:
- plugins/moreTpl
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/moreTpl/_define.php
r217 r241 14 14 /* Name */ "MoreTpl", 15 15 /* Description*/ "More template markers for your themes", 16 /* Author */ "Kozlika ",17 /* Version */ '0. 6',16 /* Author */ "Kozlika and contributors", 17 /* Version */ '0.7', 18 18 /* Permissions */ 'usage,contentadmin' 19 19 ); -
plugins/moreTpl/_public.php
r217 r241 1 1 <?php 2 2 3 # -- BEGIN LICENSE BLOCK ---------------------------------- 3 4 # … … 11 12 # -- END LICENSE BLOCK ------------------------------------ 12 13 14 if (!defined('DC_RC_PATH')) { 15 return; 16 } 17 18 $core->tpl->addBlock('EntryIfPosition',array('tplMoreTpl','EntryIfPosition')); 13 19 $core->tpl->addValue('EntryExcerptAndContent',array('tplMoreTpl','EntryExcerptAndContent')); 14 20 $core->tpl->addValue('EntryCategoryShortURL',array('tplMoreTpl','EntryCategoryShortURL')); … … 17 23 $core->tpl->addValue('EntryTrackbackCountDigit',array('tplMoreTpl','EntryTrackbackCountDigit')); 18 24 $core->tpl->addValue('TagEntriesCount',array('tplmoreTpl','TagEntriesCount')); 25 $core->tpl->addValue('CoreVersion',array('tplMyMoreTpl','CoreVersion')); 26 $core->tpl->addValue('MetaSeparator',array('tplMyMoreTpl','MetaSeparator')); 27 $core->tpl->addValue('EntryUpdate',array('tplMyMoreTpl','EntryUpdate')); 28 $core->tpl->addBlock('PrevOrNextEntries',array('tplMyMoreTpl','PrevOrNextEntries')); 29 19 30 20 31 class tplMoreTpl 21 32 { 22 /* 33 /** 34 Fonction interne, ne peut pas être utilisée directement depuis le template 35 36 @param str <b>string</b> String to parse 37 @param var <b>string</b> Tested variable name 38 @return <b>string</b> 39 */ 40 public static function testInExpr($str,$var) 41 { 42 $or = array(); 43 foreach (explode(',',$str) as $v) 44 { 45 $v = trim($v); 46 $and = explode(' ',$v); 47 foreach ($and as $k_=>$v_) 48 { 49 $v_ = trim($v_); 50 $neg = false; 51 $op = '=='; 52 53 # Not 54 if (preg_match('/^!/',$v_)) { 55 $v_ = substr($v_,1); 56 $neg = true; 57 $op = '!='; 58 } 59 60 # Number specification 61 if (preg_match('/^[1-9][0-9]*$/',$v_,$m)) { 62 $nb = (integer) $m[0]; 63 $res = $var.$op.$nb; 64 $neg = false; 65 } 66 # Interval specification 67 elseif (preg_match('/^([1-9][0-9]*)-([1-9][0-9]*)?$/',$v_,$m)) { 68 $n1 = (integer) $m[1]; 69 if (isset($m[2])) { 70 $n2 = (integer) $m[2]; 71 if ($n1 > $n2) { 72 list($n1,$n2) = array($n2,$n1); 73 } 74 $res = $var.'>='.$n1.' && '.$var.'<='.$n2; 75 } else { 76 $res = $var.'>='.$n1.''; 77 } 78 } 79 # Step specification 80 elseif (preg_match('#^/([1-9][0-9]*)(?:\+([0-9]+))?$#',$v_,$m)) { 81 $n1 = (integer) $m[1]; 82 if (isset($m[2])) { 83 $n2 = (integer) $m[2]; 84 $res = '('.$var.'-'.$n2.')%'.$n1.$op.'0'; 85 } else { 86 $res = $var.'%'.$n1.$op.'0'; 87 } 88 $neg = false; 89 } 90 # Odd items 91 elseif ($v_ == 'odd') { 92 $res = $var.'&1'; 93 } 94 # Invalid format : cancel current alternative 95 else { 96 $res = 'false'; 97 $neg = false; 98 } 99 100 $res = ($neg ? '!' : '').'('.$res.')'; 101 $and[$k_] = $res; 102 } 103 $or[] = implode(' && ',$and); 104 } 105 106 return implode(' || ',$or); 107 } 108 109 /** 110 Cette fonction vérifie la position du billet (1er, 2ème, 3ème, etc.) 111 par rapport à l'argument "is" spécifié, qui contient la liste des 112 positions acceptées, séparées par des virgules. 113 114 Lisez la documentation en ligne pour plus de détails sur la syntaxe à 115 utiliser. 116 117 Utilisation : <tpl:EntryIfPosition is="x,y,a-b odd,!z,/n+m"> 118 */ 119 public static function EntryIfPosition($attr,$content) 120 { 121 $is = isset($attr['is']) ? trim($attr['is']) : ''; 122 $expr = self::testInExpr($is,'$idx'); 123 return 124 '<?php $idx = $_ctx->posts->index()+1; if ('.$expr.'): ?>'. 125 $content. 126 '<?php endif; unset($idx); ?>'; 127 } 128 129 /** 23 130 Cette fonction recueille le contenu du post_chapo et du post_content 24 131 (par exemple pour lui appliquer un cut_string ou afficher le premier billet in extenso) … … 38 145 } 39 146 40 /* 147 /** 41 148 Cette fonction affiche le nom "URL" de la categorie dans le contexte d'un billet 42 149 (par exemple pour affecter une class dans la div post) … … 51 158 } 52 159 53 /* 54 Cette fonction affiche en chiffres le nombre de bilets d'une catégorie (en chiffres)160 /** 161 Cette fonction affiche en chiffres le nombre de bilets d'une catégorie 55 162 (par exemple pour le content-info de category.html) 56 163 Utilisation : {{tpl:CategoryEntriesCount}} -> 3 … … 64 171 } 65 172 66 /* 173 /** 67 174 Cette fonction affiche le nombre de commentaires en chiffres et sans mention 68 175 Utilisation : {{tpl:EntryCommentCountDigit}} -> 4 … … 94 201 } 95 202 96 /* 203 /** 97 204 Cette fonction affiche le nombre de trackbacks en chiffres 98 205 Utilisation : {{tpl:EntryTrackbackCountDigit}} -> 2 … … 123 230 "} ?>"; 124 231 } 125 126 /* 232 /** 127 233 Cette fonction affiche le nombre de billets correspondant à un tag 128 234 Utilisation (dans la page tags.html, tag.html ou une boucle <tpl:Metadata>) : 129 235 {{tpl:TagEntriesCount}} -> 12 130 */ 236 */ 131 237 public static function TagEntriesCount($attr) 132 238 { … … 135 241 return '<?php echo '.sprintf($f, $n).'; ?>'; 136 242 } 243 /** 244 CoreVersion 245 246 Cette fonction affiche la version du noyau Dotclear d'après le champ core de la table version 247 (par exemple pour préciser la version après "Propulsé par Dotclear") 248 Utilisation : {{tpl:CoreVersion}} -> 2.0 RC1 249 */ 250 public static function CoreVersion($attr) 251 { 252 $f = $GLOBALS['core']->tpl->getFilters($attr); 253 254 return 255 '<?php echo '.sprintf($f,'$GLOBALS["core"]->getVersion()').'; ?>'; 256 } 257 258 /** 259 MetaSeparator 260 261 Cette fonction affiche un séparateur (qui peut être spécifié en paramètre) entre 262 les tags d'un billet. Cela permet par exemple d'utiliser une virgule comme 263 séparateur de tags et de ne pas avoir une virgule superflue qui traîne après 264 le dernier tag. 265 266 Paramètre du tag : 267 - separator : indique le texte à utiliser comme séparateur (valeur par défaut : ' - ') 268 269 Exemples d'utilisation : 270 271 Le bloc de code : 272 <tpl:EntryMetaData><a href="{{tpl:MetaURL}}">{{tpl:MetaID}}</a>{{tpl:MetaSeparator}}</tpl:EntryMetaData> 273 affiche une liste de tous les tags du billet en les séparant simplement par un tiret. 274 */ 275 public static function MetaSeparator($attr) 276 { 277 $ret = isset($attr['separator']) ? $attr['separator'] : ' - '; 278 $ret = html::escapeHTML($ret); 279 return '<?php if (! $_ctx->meta->isEnd()) { ' . "echo '".addslashes($ret)."'; } ?>"; 280 } 281 282 /** 283 EntryUpdate 284 285 Cette fonction affiche la date et l'heure de la dernière mise à jour du billet 286 Le format d'affichage répond à la syntaxe de la fonction strftime(): 287 http://fr.php.net/manual/fr/function.strftime.php 288 289 Exemples d'utilisation : 290 291 {{tpl:EntryUpdateDate}} affichera "date_format, time_format" 292 où date_format et time_format sont les formats de l'affichage de 293 la date et de l'heure définis dans les "Paramètres du blog" 294 295 {{tpl:lang Last update :}} {{tpl:EntryUpdate format="%A %e %B %Y, %H:%M:%S"}} 296 affichera : 297 "Dernière mise à jour : vendredi 30 novembre 2007, 16:53:05" 298 */ 299 $GLOBALS['__l10n']['Last update :'] = 'Dernière mise à jour :'; 300 public static function EntryUpdate($attr) 301 { 302 global $core; 303 304 $format = (!empty($attr['format'])) ? $attr['format'] : 305 $core->blog->settings->date_format.', '.$core->blog->settings->time_format; 306 $f = $GLOBALS['core']->tpl->getFilters($attr); 307 308 return('<?php echo '.'dt::dt2str(\''.$format.'\','.sprintf($f,'$_ctx->posts->post_upddt'). 309 ',\''.$core->blog->settings->blog_timezone.'\'); ?>'); 310 } 311 312 /** 313 PrevOrNextEntries 314 315 Cette fonction crée un bloc balise pour le template post.html qui permet d'afficher les x billets précédant ou suivant le billet courant. Possibilité de filtrer par langue, catégorie et de définir le nombre de résultats à retourner 316 317 Utilisation : <tpl:PrevOrNextEntries>[...]</tpl:PrevOrNextEntries> 318 319 Paramètres : 320 - Option "cat" accepte 0 pour exécuter la requête sur tous les posts ou 1 pour que ce ne soit que des billets de la même catégorie que le post en cours qui s'affichent => défaut 0 321 - Option "lng" (pour les blogs multilangues) accepte 0 pour trier tous les posts de toutes les langues ou 1 pour les billets de la même langue que le post en cours => défaut 0 322 - Option "dir" accepte 0 pour les x posts précédents ou 1 pour les x posts suivants => défaut 0 323 - Option "qty" accepte une valeur numérique qui correspondra au nombre de posts retournés par DC (dans la limite du nb total de posts publiés sans password) => défaut 2 324 325 Précision : 326 - Les 4 options sont utilisables simultanément vous pouvez donc afficher le billet suivant rédigé dans la même langue et publié dans la même catégorie à l'aide du code suivant : 327 - Si vous souhaitez utiliser la valeur par défaut de l'option, il est inutile, et même recommandé dans une démarche d'optimisation, de ne pas utiliser cet argument. Par exemple si vous souhaitez afficher les deux billets précédents parmi toutes les catégories et toutes les langues, le bloc de base indiqué dans "Utilisation" est suffisant. 328 */ 329 330 public function PrevOrNextEntries($attr,$content) 331 { 332 function getPrevOrNextPosts($post,$cat,$lng,$dir,$qty) 333 { 334 global $core; 335 if($cat==1) { $params['sql'] = $post->cat_id ? ' AND P.cat_id = '.$post->cat_id : ' AND P.cat_id IS NULL'; } 336 if($lng==1) { $params['sql'] .= $post->post_lang ? ' AND P.post_lang = \''.$core->con->escape($post->post_lang).'\'' : ' AND P.post_lang IS NULL'; } 337 if($dir==1) { $sign='>'; $order='ASC'; } else { $sign='<'; $order='DESC'; } 338 $dt = $post->post_dt; $post_id = $post->post_id; 339 $params['post_type'] = $post->post_type; $params['limit'] = $qty; $params['order'] = 'post_dt '.$order.', P.post_id '.$order; 340 $params['sql'] .= ' AND ((post_dt = \''.$core->con->escape($dt).'\' AND P.post_id '.$sign.' '.$post_id.') OR post_dt '.$sign.' \''.$core->con->escape($dt).'\') '; 341 $rs = $core->blog->getPosts($params); 342 if ($rs->isEmpty()) { 343 return null; 344 } 345 346 return $rs; 347 } 348 349 $cat = !empty($attr['cat']) ? $attr['cat'] : '0'; 350 $lng = !empty($attr['lng']) ? $attr['lng'] : '0'; 351 $dir = !empty($attr['dir']) ? $attr['dir'] : '0'; 352 $qty = !empty($attr['qty']) ? $attr['qty'] : '2'; 353 return '<?php $prev_post = getPrevOrNextPosts($_ctx->posts,'.$cat.','.$lng.','.$dir.','.$qty.'); ?>'."\n". 354 '<?php if ($prev_post !== null) : ?>'. 355 356 '<?php $_ctx->posts = $prev_post; unset($prev_post);'."\n". 357 'while ($_ctx->posts->fetch()) : ?>'. 358 $content. 359 '<?php endwhile; $_ctx->posts = null; ?>'. 360 "<?php endif; ?>\n"; 361 } 362 137 363 } 138 364 ?>
Note: See TracChangeset
for help on using the changeset viewer.