myMoreTpl
Fonctions template pour Dotclear 2 en prêt-à-porter.
Cette page est destinée à collecter toutes fonctions créant de nouvelles balises templates pour les thèmes Dotclear 2. C'est une page wiki : si vous constatez des erreurs ortho ou typographiques ou une erreur de code, vous pouvez la modifier.
- Guide du contributeur. Conventions de présentation des fonctions. Merci à tout contributeur de s'y référer.
- Guide pas à pas de l'utilisateur. Pour ceux qui ne savent pas du tout par quel bout s'y prendre.
Fonctions
A placer dans le fichier _public.php du thème ou du plugin MyMoreTpl dans une classe tplMyMoreTpl.
CoreVersion
Affiche le numéro de la version de Dotclear
- type : value
- contexte html : tous
- contexte balises : aucun
Déclaration
$core->tpl->addValue('CoreVersion',array('tplMyMoreTpl','CoreVersion'));
Fonction
/** CoreVersion Cette fonction affiche la version du noyau Dotclear d'après le champ core de la table version (par exemple pour préciser la version après "Propulsé par Dotclear") Utilisation : {{tpl:CoreVersion}} -> 2.0 RC1 */ public static function CoreVersion($attr) { $f = $GLOBALS['core']->tpl->getFilters($attr); return '<?php echo '.sprintf($f,'$GLOBALS["core"]->getVersion()').'; ?>'; }
MetaSeparator
Affiche un séparateur entre les tags d'un billet
- type : value
- contexte html : tous ceux présentant des billets
- contexte balises :
<tpl:EntryMetaData> </tpl:EntryMetaData>
Déclaration
$core->tpl->addValue('MetaSeparator',array('tplMyMoreTpl','MetaSeparator'));
Fonction
/** MetaSeparator Cette fonction affiche un séparateur (qui peut être spécifié en paramètre) entre les tags d'un billet. Cela permet par exemple d'utiliser une virgule comme séparateur de tags et de ne pas avoir une virgule superflue qui traîne après le dernier tag. Paramètre du tag : - separator : indique le texte à utiliser comme séparateur (valeur par défaut : ' - ') Exemples d'utilisation : Le bloc de code : <tpl:EntryMetaData><a href="{{tpl:MetaURL}}">{{tpl:MetaID}}</a>{{tpl:MetaSeparator}}</tpl:EntryMetaData> affiche une liste de tous les tags du billet en les séparant simplement par un tiret. */ public static function MetaSeparator($attr) { $ret = isset($attr['separator']) ? $attr['separator'] : ' - '; $ret = html::escapeHTML($ret); return '<?php if (! $_ctx->meta->isEnd()) { ' . "echo '".addslashes($ret)."'; } ?>"; }
EntryUpdate
Affiche la date et l'heure de la mise à jour du billet
- type : value
- contexte html : tous ceux présentant des billets
- contexte balises :
<tpl:Entry> </tpl:Entry>et post.html
Déclaration
$core->tpl->addValue('EntryUpdate',array('tplMyMoreTpl','EntryUpdate')); $GLOBALS['__l10n']['Last update :'] = 'Dernière mise à jour :';
Fonction
/** EntryUpdate Cette fonction affiche la date et l'heure de la dernière mise à jour du billet Le format d'affichage répond à la syntaxe de la fonction strftime(): http://fr.php.net/manual/fr/function.strftime.php Exemples d'utilisation : {{tpl:EntryUpdateDate}} affichera "date_format, time_format" où date_format et time_format sont les formats de l'affichage de la date et de l'heure définis dans les "Paramètres du blog" {{tpl:lang Last update :}} {{tpl:EntryUpdate format="%A %e %B %Y, %H:%M:%S"}} affichera : "Dernière mise à jour : vendredi 30 novembre 2007, 16:53:05" */ public static function EntryUpdate($attr) { global $core; $format = (!empty($attr['format'])) ? $attr['format'] : $core->blog->settings->date_format.', '.$core->blog->settings->time_format; $f = $GLOBALS['core']->tpl->getFilters($attr); return('<?php echo '.'dt::dt2str(\''.$format.'\','.sprintf($f,'$_ctx->posts->post_upddt'). ',\''.$core->blog->settings->blog_timezone.'\'); ?>'); }
EntryCommentCountDigit
supprimée. Le code actuel de dotclear permet de le faire directement (voir comment_count dans la doc template)
EntryTrackbackCountDigit
supprimée. Le code actuel de dotclear permet de le faire directement (voir comment_count dans la doc template)
TagEntriesCount
Affiche le nombre de billets d'un tag en chiffres et sans mention
- type : value
- contexte html/contexte balises : tag.html, tags.html ou dans les balises
<tpl:Metadata> </tpl:Metadata>
Déclaration
$core->tpl->addValue('TagEntriesCount',array('tplMyMoreTpl','TagEntriesCount'));
Fonction
/* TagEntriesCount Cette fonction affiche le nombre de billets correspondant à un tag Utilisation (dans la page tags.html, tag.html ou une boucle <tpl:Metadata>) : {{tpl:TagEntriesCount}} -> 12 */ public static function TagEntriesCount($attr) { $f = $GLOBALS['core']->tpl->getFilters($attr); $n = '$_ctx->meta->count'; return '<?php echo '.sprintf($f, $n).'; ?>'; }
EntryExcerptAndContent
Supprimé, ceci est désormais possible directement. Voir balise entrycontent dans la doc Dotclear.
EntryCategoryShortURL
Figure désormais directement dans Dotclear.
PrevOrNextEntries
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
- balise de type : block
- contextes html : post.html
- contexte balises : tous
Déclaration
$core->tpl->addBlock('PrevOrNextEntries',array('tplMyMoreTpl','PrevOrNextEntries'));
Fonction
/** PrevOrNextEntries 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 Utilisation : <tpl:PrevOrNextEntries>[...]</tpl:PrevOrNextEntries> Paramètres : - 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 - 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 - Option "dir" accepte 0 pour les x posts précédents ou 1 pour les x posts suivants => défaut 0 - 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 Précision : - 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 : - 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. */ public function PrevOrNextEntries($attr,$content) { function getPrevOrNextPosts($post,$cat,$lng,$dir,$qty) { global $core; if($cat==1) { $params['sql'] = $post->cat_id ? ' AND P.cat_id = '.$post->cat_id : ' AND P.cat_id IS NULL'; } if($lng==1) { $params['sql'] .= $post->post_lang ? ' AND P.post_lang = \''.$core->con->escape($post->post_lang).'\'' : ' AND P.post_lang IS NULL'; } if($dir==1) { $sign='>'; $order='ASC'; } else { $sign='<'; $order='DESC'; } $dt = $post->post_dt; $post_id = $post->post_id; $params['post_type'] = $post->post_type; $params['limit'] = $qty; $params['order'] = 'post_dt '.$order.', P.post_id '.$order; $params['sql'] .= ' AND ((post_dt = \''.$core->con->escape($dt).'\' AND P.post_id '.$sign.' '.$post_id.') OR post_dt '.$sign.' \''.$core->con->escape($dt).'\') '; $rs = $core->blog->getPosts($params); if ($rs->isEmpty()) { return null; } return $rs; } $cat = !empty($attr['cat']) ? $attr['cat'] : '0'; $lng = !empty($attr['lng']) ? $attr['lng'] : '0'; $dir = !empty($attr['dir']) ? $attr['dir'] : '0'; $qty = !empty($attr['qty']) ? $attr['qty'] : '2'; return '<?php $prev_post = getPrevOrNextPosts($_ctx->posts,'.$cat.','.$lng.','.$dir.','.$qty.'); ?>'."\n". '<?php if ($prev_post !== null) : ?>'. '<?php $_ctx->posts = $prev_post; unset($prev_post);'."\n". 'while ($_ctx->posts->fetch()) : ?>'. $content. '<?php endwhile; $_ctx->posts = null; ?>'. "<?php endif; ?>\n"; }