Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Bonjour,
Je souhaite pouvoir afficher via des balises
{{tpl:IdentifiantTpl}}
et sans passer par des widgets existant, le nombre de billets total et le nombre de catégories du blog
j'ai donc créé un fichier _public.php dans le thème actif avec le code ci-dessous
<?php
$core->tpl->addValue('CountCategories', array('tplMoreTpl', 'CountCategories'));
$core->tpl->addValue('CountPosts', array('tplMoreTpl', 'CountPosts'));
class tplMoreTpl {
public static function CountCategories($attr)
{
$f = $GLOBALS['core']->tpl->getFilters($attr);
$n = '$_ctx->categories->count';
return '<?php echo '.sprintf($f, $n).'; ?>';
}
public static function CountPosts($attr)
{
$f = $GLOBALS['core']->tpl->getFilters($attr);
$n = '$_ctx->posts->count';
return '<?php echo '.sprintf($f, $n).'; ?>';
}
}
?>
et les tpl ne sont pas interprétés, il ne m'affiche pas les "comptes" souhaités.
Merci de votre aide
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Bonjour Dsls,
je place les tpl dans la page home.html et juste après
<div id="content">
Comme ceci
<p class="infosblog">Actuellement il y a : {{tpl:CountPosts}} billetss classés dans {{tpl:CountCategories}} catégories</p>
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Normal que ça n'affiche rien : $_ctx->posts et $_ctx->categories ne sont renseignées que dans des boucles type tpl:Entries, et ne sont pas renseignés par défaut.
il faut passer par $core->blog->getPosts(array(),true)->f(0) pour le nombre de billets et $core->blog->getCategoriesCounter() pour le nombre de catégories
Dyslexics have more fnu!
Hors ligne
OK Dsls merci de tes explications, mais là comme je débute complètement en php je ne vois pas quoi remplacer avec tes explications dans la fonction php que j'ai indiquée dans mon premier post et que j'avais d'ailleurs reprise d'ici
merci de ton aide
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Pour le nombre de billets, voici ce que j'utilise
public static function entriesNumber()
{
$core = &$GLOBALS['core'];
$p = $core->blog->getPosts(array(),true)->f(0);
return $p;
}
et qui pourrait remplacer ta fonction CountPosts, tu devrais ensuite trouver pour les catégories ;)
Hors ligne
OK alors apparemment ça ne fonctionne toujours pas :(
Voilà ce que j'ai mis dans mon _public.php
<?php
$core->tpl->addValue('CountCategories', array('tplMoreTpl', 'CountCategories'));
$core->tpl->addValue('CountPosts', array('tplMoreTpl', 'CountPosts'));
class tplMoreTpl {
public static function CountCategories()
{
$core = &$GLOBALS['core'];
$f = $core->blog->getCategoriesCounter();
return $f;
}
public static function CountPosts()
{
$core = &$GLOBALS['core'];
$p = $core->blog->getPosts(array(),true)->f(0);
return $p;
}
}
?>
et dans mon home.html
<p class="infosblog">Actuellement il y a : {{tpl:CountPosts}} posts classés dans {{tpl:CountCategories}} catégories</p>
je ne vois pas ce qui ne vas pas?
Merci de votre aide
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Nope, il faut retourner le code généré :
<?php
$core->tpl->addValue('CountCategories', array('tplMoreTpl', 'CountCategories'));
$core->tpl->addValue('CountPosts', array('tplMoreTpl', 'CountPosts'));
class tplMoreTpl {
public static function CountCategories()
{
$f = '<?php echo $core->blog->getCategoriesCounter() ?>';
return $f;
}
public static function CountPosts()
{
$p = '<?php $core->blog->getPosts(array(),true)->f(0) ?>';
return $p;
}
}
?>
Dyslexics have more fnu!
Hors ligne
Nope, il faut retourner le code généré :
Bah pas forcément, lorsqu'on ajoute un billet on fait un triggerBlog et ça se met à jour, non ?
Hors ligne
En tous cas ça ne fonctionne pas. J'ai fait un copié/collé du code de Dsls :(
J'ai oublié de préciser que je suis sur une install multiblogs, je ne sais pas si ça peut avoir un impact ...
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Et pourtant ça devrait marcher... Pour info le code que je t'ai donné est en service ici (dans le message de bienvenue)
Tu n'aurais pas un plugin comme staticCache ou memCache ? As-tu vidé le répertoire du cache de templates (bien que ce ne soit pas nécessaire a priori avec le code donné par Dsls) ?
Hors ligne
Bon je suis vraiment un naze, je mettais _public.php dans le dossier tpl :(
bon maintenant que je l'ai déplacé à la racine le thème, j'obtiens une belle erreur :
Fatal error: Uncaught exception 'Exception' with message 'No valid callback for CountPosts' in /homez.29/bizetfam/www/blog/inc/clearbricks/template/class.template.php:125 Stack trace: #0 /homez.29/bizetfam/www/fichiers_communs/themes/favorismobile/_public.php(3): template->addValue('CountPosts', Array) #1 /homez.29/bizetfam/www/blog/inc/core/class.dc.modules.php(530): require('/homez.29/bizet...') #2 /homez.29/bizetfam/www/blog/inc/core/class.dc.themes.php(79): dcModules->loadModuleFile('/home/bizetfam/...') #3 /homez.29/bizetfam/www/blog/inc/public/prepend.php(113): dcThemes->loadNsFile('favorismobile', 'public') #4 /homez.29/bizetfam/www/blog_favmob/index.php(22): require('/homez.29/bizet...') #5 {main} thrown in /homez.29/bizetfam/www/blog/inc/clearbricks/template/class.template.php on line 125
je vous rappelle le contenu de ce public.php
<?php
$core->tpl->addValue('CountPosts', array('tplMoreTpl', 'CountPosts'));
class tplMoreTpl {
public static function CountPosts()
{
$p = '<?php $core->blog->getPosts(array(),true)->f(0) ?>';
return $p;
}
}
?>
Je vous remercie :)
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Je dirais qu'il manque
$core = &$GLOBALS['core'];
avant
$p = '<?php $core->blog->getPosts(array(),true)->f(0) ?>';
Hors ligne
Bon apparemment ce n'est toujours pas ça.
j'ai vidé : cache du navigateur et cache templates via eraseCache
mon _public.php est bien à la racine du thème, au même niveau que define.php
avec dans mon _public.php
<?php
$core->tpl->addValue('CountPosts', array('tplMoreTpl', 'CountPosts'));
class tplMoreTpl {
public static function CountPosts()
{
$core = &$GLOBALS['core'];
$p = '<?php $core->blog->getPosts(array(),true)->f(0) ?>';
return $p;
}
}
?>
dans mon home.html
<li class="filsuite">Il y a <b>{{tpl:CountPosts}}</b> liens
et j'ai toujours cette jolie erreur que vous pouvez visualiser ici
gremeuleumeleu : qu'est-ce qui se passe :(
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Essaie avec ça :
<?php
$core->tpl->addValue('CountPosts', array('tplMoreTpl', 'CountPosts'));
class tplMoreTpl {
public static function CountPosts()
{
$p = '<?php $core = &$GLOBALS['core'];$core->blog->getPosts(array(),true)->f(0) ?>';
return $p;
}
}
?>
ou plus simplement comme suggéré au #6, sans utiliser le cache de templates (cf remarque #9)
Hors ligne
L'erreur signifie qu'il manque l'argument dans la signature de la fonction php. Comme ça, ça marchera beaucoup mieux:
<?php
$core->tpl->addValue('CountPosts', array('tplMoreTpl', 'CountPosts'));
class tplMoreTpl {
public static function CountPosts($attr)
{
$p = '<?php $core->blog->getPosts(array(),true)->f(0) ?>';
return $p;
}
}
?>
Le lab => http://lab.dotclear.org
Besoin d'un plugin? => http://plugins.dotaddict.org
Besoin d'un thème? => http://themes.dotaddict.org
Besoin d'une astuce? => http://tips.dotaddict.org
Hors ligne
Essaie avec ça :
<?php $core->tpl->addValue('CountPosts', array('tplMoreTpl', 'CountPosts')); class tplMoreTpl { public static function CountPosts() { $p = '<?php $core = &$GLOBALS['core'];$core->blog->getPosts(array(),true)->f(0) ?>'; return $p; } } ?>
Ca va mieux, maintenant il me met un erreur
Parse error: syntax error, unexpected T_STRING in /homez.29/bizetfam/www/fichiers_communs/themes/favorismobile/_public.php on line 7
la ligne 7 étant
$p = '<?php $core = &$GLOBALS['core'];$core->blog->getPosts(array(),true)->f(0) ?>';
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Ou plutôt ça si tu veux que ça affiche quelque chose:
<?php
$core->tpl->addValue('CountPosts', array('tplMoreTpl', 'CountPosts'));
class tplMoreTpl
{
public static function CountPosts($attr)
{
return '<?php echo $core->blog->getPosts(array(),true)->f(0) ?>';
}
}
?>
Le lab => http://lab.dotclear.org
Besoin d'un plugin? => http://plugins.dotaddict.org
Besoin d'un thème? => http://themes.dotaddict.org
Besoin d'une astuce? => http://tips.dotaddict.org
Hors ligne
Ah ouiche, il faut bien sûr échapper les ' ^^
$p = '<?php $core = &$GLOBALS[\'core\'];$core->blog->getPosts(array(),true)->f(0) ?>';
Hors ligne
Bon bah ça marche pas j'ai de nouveau le même message d'erreur qu'en #12
j'ai testé vos 2 codes :(
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Ton thème est-il un enfant d'un autre ? Si oui, c'est dans le thème parent qu'il faut insérer le _public.php ;)
Hors ligne
j'avais aussi pensé à ça mais non mon thème n'est pas un enfant d'un autre,
Puis-je zipper mon thème avec le public.php et te l'envoyer pour voir si ça passe chez toi par hasard ?
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
amalgame : peux -tu me donner ta fonction complète que tu m'as indiqué partiellement en [urm=http://forum.dotclear.net/viewtopic.php?pid=300713#p300713]#6[/url] afin que je la teste chez moi.
Normalement elle devrait passer ...
merci
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Voici :
$core->tpl->addValue('entriesNumber',array('clairdeluneTpl','entriesNumber'));
class clairdeluneTpl {
public static function entriesNumber()
{
$core = &$GLOBALS['core'];
$p = $core->blog->getPosts(array(),true)->f(0);
return $p;
}
}
et c'est appelé par {{tpl:entriesNumber}} dans mon home.html
Hors ligne
Bon bonne nouvelle CA FONCTIONNE pour le nombre de liens :)
Par contre la fonction pour le nombre de catégories ne me renvoie pas de résultat
J'ai testé
<?php
$core->tpl->addValue('CountPosts',array('FavorisMobileTpl','CountPosts'));
class FavorisMobileTpl {
public static function CountPosts()
{
$core = &$GLOBALS['core'];
$p = $core->blog->getPosts(array(),true)->f(0);
return $p;
}
public static function CountCategories()
{
$core = &$GLOBALS['core'];
$f = $core->blog->getCategoriesCounter();
return $f;
}
}
?>
et c'est encore consultable ici
Ma Vcard : http://www.guillaumebizet.fr
Mon cv : http://cv.guillaumebizet.fr
Mes blogs : http://blog.guillaumebizet.fr - http://www.sitesmobile.fr
Hors ligne
Vous n'êtes pas identifié(e).