Même si je veux bien accorder crédit à cet adage, il peut tout de même être - parfois - bien utile de compter.
D'ailleurs, avez-vous remarqué que le jeu de balises pour templates que Dotclear 2.x embarque par défaut ne dispose pas d'un compteur d'entrées générique ?
En cas de besoin, il suffit de recourir à :
- quelques séances de copier/coller[1],
- une tournée d'élagage,
- une poignée d'enrobage.
On se retrouve alors en présence d'une nouvelle balise
{{tpl:EntriesCount}} permettant de retourner le nombre d'entrées
en fonction du contexte d'utilisation ou des filtres retenus. Ces fameux
filtres étant pour la plupart les options que vous connaissez déjà pour la
balise de bloc <tpl:Entries>, vous devriez vite trouver vos
marques.
Voici donc de quoi compléter votre trousseau moreTpl.
NB :
A consommer avec modération : cet extrait de code n'a pas été testé très
rigoureusement. Prenez donc le temps de le mettre en œuvre sur votre espace de
développement avant de songer à le passer en production[2].
EDIT 21/09/2009 :
Dans le doute, et afin de gérer l'absence de contexte, une poignée de @ a
été parsemée sur le code existant afin de limiter le risque de levée de
NOTICE.
Le copier/coller, c'est vraiment mal : voici donc une version plus saine.[3]
class myLovelyTemplates
{
public static function EntriesCount($attr)
{
$p = "if (!is_array(\$params)) \$params = array();
";
if (isset($attr['author'])) {
$p .= "\$params['user_id'] = '".addslashes($attr['author'])."';
";
}
if (isset($attr['category'])) {
$p .= "\$params['cat_url'] = '".addslashes($attr['category'])."';
";
$p .= "context::categoryPostParam(\$params);
";
}
if (isset($attr['no_category'])) {
$p .= "\$params['sql'] .= ' AND P.cat_id IS NULL ';
";
$p .= "unset(\$params['cat_url']);
";
}
if (!empty($attr['type'])) {
$p .= "\$params['post_type'] = preg_split('/\s*,\s*/','".addslashes($attr['type'])."',-1,PREG_SPLIT_NO_EMPTY);
";
}
if (isset($attr['tag'])) {
$p .=
"\$params['from'] .= ', '.\$core->prefix.'meta META ';
".
"\$params['sql'] .= 'AND META.post_id = P.post_id ';
".
"\$params['sql'] .= \"AND META.meta_type = 'tag' \";
".
"\$params['sql'] .= \"AND META.meta_id = '".$GLOBALS['core']->con->escape($attr['tag'])."' \";
";
}
if (empty($attr['no_context'])) {
$p .=
'if ($_ctx->exists("users")) { '.
"\$params['user_id'] = \$_ctx->users->user_id; ".
"}
";
$p .=
'if ($_ctx->exists("categories")) { '.
"\$params['cat_id'] = \$_ctx->categories->cat_id; ".
"}
";
$p .=
'if ($_ctx->exists("archives")) { '.
"\$params['post_year'] = \$_ctx->archives->year(); ".
"\$params['post_month'] = \$_ctx->archives->month(); ".
"unset(\$params['limit']); ".
"}
";
$p .=
'if ($_ctx->exists("langs")) { '.
"\$params['post_lang'] = \$_ctx->langs->post_lang; ".
"}
";
$p .=
'if (isset($_search)) { '.
"\$params['search'] = \$_search; ".
"}
";
$p .=
'if ($_ctx->exists("meta")) { '.
"\$params['from'] .= ', '.\$core->prefix.'meta META ';
".
"\$params['sql'] .= 'AND META.post_id = P.post_id ';
".
"\$params['sql'] .= \"AND META.meta_type = 'tag' \";
".
"\$params['sql'] .= \"AND META.meta_id = '\".\$core->con->escape(\$_ctx->meta->meta_id).\"' \";
".
"}
";
}
if (isset($attr['selected'])) {
$p .= "\$params['post_selected'] = ".(integer) (boolean) $attr['selected'].";";
}
return
"<?php
".
$p.
'$_ctx->post_params = $params;'."
".
'$_ctx->posts = $core->blog->getPosts($params,true); unset($params);'."
".
'echo $_ctx->posts->f(0);'."
".
'$_ctx->posts = null; $_ctx->post_params = null;'."
".
"?>
";
}
}
$core->tpl->addValue('EntriesCount',array('myLovelyTemplates','EntriesCount'));
Commentaires
#1
mirovinben
mercredi 16 septembre 2009, 20:58
"emptyempty" (en #19 et #31) !? mékéskeucé ? J'trouve pas dans la doc PHP...
#2
mirovinben
mercredi 16 septembre 2009, 21:01
C'est bizarre car "empty" ne doublonne pas dans l'affichage du flux RSS via mon agrégateur. !!??
#3
Pep
mercredi 16 septembre 2009, 21:03
Yep. C'est YASH qui semble paniquer sur la syntaxe PHP.
#4
Franck
jeudi 17 septembre 2009, 08:06
Yep c'est yash le coupable ! Il me fait le même coup dans ce billet ;-)
#5
Franck
dimanche 20 septembre 2009, 12:28
Euh, dis m'sieur, spa plutôt un
return "<?php ".$res." ?>";qu'il faut à la fin ?#6
Franck
dimanche 20 septembre 2009, 12:29
Ah bah non j'avions mal lu, pfff … vais me recoucher moi :-)
#7
Pep
dimanche 20 septembre 2009, 17:34
Franck > Uhuh. Un blâme ! :-p
#8
Franck
dimanche 20 septembre 2009, 21:48
Pfff pris par la patrouille ! Et merdre :(
Qu'est-ce qu'il va m'inventer cette fois-ci ?
#9
Osku
mercredi 23 septembre 2009, 11:11
Je le dis depuis le début :-D
#10
Pep
mercredi 23 septembre 2009, 11:13
Osku > Ça y est ? A peine rentré et c'est déjà la foire aux trolls ? :-p