Dotclear

Changeset 241


Ignore:
Timestamp:
09/29/08 08:14:33 (15 years ago)
Author:
kozlika
Message:

Add all template functions I know + an icon

Location:
plugins/moreTpl
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • plugins/moreTpl/_define.php

    r217 r241  
    1414        /* Name */                      "MoreTpl", 
    1515        /* Description*/                "More template markers for your themes", 
    16         /* Author */                    "Kozlika", 
    17         /* Version */                   '0.6', 
     16        /* Author */                    "Kozlika and contributors", 
     17        /* Version */                   '0.7', 
    1818        /* Permissions */               'usage,contentadmin' 
    1919); 
  • plugins/moreTpl/_public.php

    r217 r241  
    11<?php 
     2 
    23# -- BEGIN LICENSE BLOCK ---------------------------------- 
    34# 
     
    1112# -- END LICENSE BLOCK ------------------------------------ 
    1213 
     14if (!defined('DC_RC_PATH')) {  
     15     return;  
     16     } 
     17 
     18$core->tpl->addBlock('EntryIfPosition',array('tplMoreTpl','EntryIfPosition')); 
    1319$core->tpl->addValue('EntryExcerptAndContent',array('tplMoreTpl','EntryExcerptAndContent')); 
    1420$core->tpl->addValue('EntryCategoryShortURL',array('tplMoreTpl','EntryCategoryShortURL')); 
     
    1723$core->tpl->addValue('EntryTrackbackCountDigit',array('tplMoreTpl','EntryTrackbackCountDigit')); 
    1824$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 
    1930 
    2031class tplMoreTpl 
    2132{ 
    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     /** 
    23130     Cette fonction recueille le contenu du post_chapo et du post_content 
    24131     (par exemple pour lui appliquer un cut_string ou afficher le premier billet in extenso) 
     
    38145     } 
    39146 
    40      /* 
     147     /** 
    41148     Cette fonction affiche le nom "URL" de la categorie dans le contexte d'un billet 
    42149     (par exemple pour affecter une class dans la div post) 
     
    51158     } 
    52159 
    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 
    55162     (par exemple pour le content-info de category.html) 
    56163     Utilisation : {{tpl:CategoryEntriesCount}} -> 3 
     
    64171     } 
    65172 
    66      /* 
     173     /** 
    67174     Cette fonction affiche le nombre de commentaires en chiffres et sans mention 
    68175     Utilisation : {{tpl:EntryCommentCountDigit}} -> 4 
     
    94201     } 
    95202 
    96      /* 
     203     /** 
    97204     Cette fonction affiche le nombre de trackbacks en chiffres 
    98205     Utilisation : {{tpl:EntryTrackbackCountDigit}} -> 2 
     
    123230          "} ?>"; 
    124231     } 
    125  
    126      /* 
     232     /** 
    127233     Cette fonction affiche le nombre de billets correspondant à un tag 
    128234     Utilisation (dans la page tags.html, tag.html ou une boucle <tpl:Metadata>) : 
    129235     {{tpl:TagEntriesCount}} -> 12 
    130      */ 
     236     */    
    131237     public static function TagEntriesCount($attr) 
    132238     { 
     
    135241         return '<?php echo '.sprintf($f, $n).'; ?>'; 
    136242     } 
     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 
    137363} 
    138364?> 
Note: See TracChangeset for help on using the changeset viewer.

Sites map