DotClear : afficher le nombre de lectures d'un billet
Par Benjamin le samedi 18 décembre 2004, 01h02 - DotClear - Lien permanent - URL miniature
A l'installation de ce blog, j'ai eu assez rapidement envie d'afficher le nombre de lectures de chaque billet. J'étais arrivé à un résultat qui me convenait en cherchant par-ci par-là les différents éléments à modifier. Puisque cela peut être utile à certains, voici la marche à suivre.
Cette modification est désormais disponible sous forme de plugin, voir cette page.
Suivons pas à pas les étapes à réaliser pour permettre cet affichage.
dans la base de données, dans la table xx_post (remplacer par le bon préfixe)
j'ai ajouté un champ après nb_trackback en copiant les mêmes paramètres
Nom du champ : nb_view
Type : INT
Longueur : 11
Null autorisé : non
Valeur par défaut : 0
Exemple en images :
Après avoir cliqué sur le nom de la table dans la colonne de gauche...



Il ne reste ensuite qu'à sauvegarder la modification.
puis dans inc/classes/class.blog.php
//j'ai remplacé 'post_open_comment, post_open_tb, nb_comment, nb_trackback, '. //par 'post_open_comment, post_open_tb, nb_comment, nb_trackback, nb_view, '.
ensuite dans /layout/functions.php
//j'ai ajouté après le bloc de la fonction dcPostNbTrackbacks /** @function dcPostNbViews Cette fonction affiche le nombre de lectures d'un billet. Les trois arguments permettent de définir le texte affiché pour respectivement aucune, une ou plusieurs lectures. Par exemple: |<?php dcPostNbViews('aucune lecture','lu une fois', |'lu %s fois'); ?> @param string zero Texte affiché pour 0 lecture @param string one Texte affiché pour 1 lecture @param string more Texte affiché plusieurs lectures */ function dcPostNbViews($zero,$one,$more) { $nb = $GLOBALS['news']->f('nb_view'); if($nb == 0) { echo $zero; } elseif($nb == 1) { echo $one; } elseif($nb > 1) { printf($more,$nb); } }
et dans /themes/opinionz/list.php (modifier selon le thème utilisé)
//j'ai remplacé <a href="<?php dcPostURL(); ?>#co" title="commentaires pour : <?php dcPostTitle(); ?>"><?php dcPostNbComments('aucun commentaire','un commentaire','%s commentaires'); ?></a> //par <a href="<?php dcPostURL(); ?>" title="nombre de lectures pour : <?php dcPostTitle(); ?>"><?php dcPostNbViews('aucune lecture','lu une fois','lu %s fois'); ?></a> <span>::</span> <a href="<?php dcPostURL(); ?>#co" title="commentaires pour : <?php dcPostTitle(); ?>"><?php dcPostNbComments('aucun commentaire','un commentaire','%s commentaires'); ?></a>
et pour finir dans /themes/opinionz/post.php (modifier selon le thème utilisé)
en début de fichier, après le bloc de la licence, j'ai ajouté
//à copier tel quel sans rien modifier <?php global $con; $billet = $GLOBALS['news']->f('post_id'); $rs = $con->execute('UPDATE '.DB_PREFIX.'post SET nb_view = nb_view+1 WHERE post_id='.$billet.''); ?>
Vous pouvez maintenant vous réjouir devant le succès de vos billets 
Commentaires
il va falloir faire fi de la colorisation syntaxique dans certains cas on dirait
pour moi deja ca commence mal ! dans ma BDD j'ai pas :PREFIX_blog et nb_trackback
Peux tu m'aider ?
tu n'as rien qui termine par _blog ?
tu dois avoir normalement dans cette table un champ nb_trackback
bah non !
j'ai ma base et en arborescence :
dc_comment
dc_comment
etc...
tu as deux fois dc_comment mais pas de dc_blog ?
mais comment une telle chose est-elle possible
Non me suis trompé ! lol
Bon j'ai créer nb_trackback ! ca fonctionne aparement ! mais apparement ca reste toujour a zero !
si tu as bien modifié tout ce qui est expliqué au-dessus, vérifie déjà si les valeurs ont changées dans la base de données...
<?php
global $con;
$billet = $GLOBALS['news']->f('post_id');
$rs = $con->execute('UPDATE '.DB_PREFIX.'post SET nb_view = nb_view+1 WHERE post_id='.$billet.'');
?>
La tu fais appel a la BDD ?(DB_PREFIX)
tout-à-fait, c'est la ligne qui met à jour le nombre de lectures
tu ne dois normalement rien changer au code, "DB_PREFIX" étant une variable globale DotClear
ok bah ca fonctionne pas chez moi ! arfff ! essai de me contacter par MSN si tu as ! ptitgenie76[at]hotmail[.]com
Merci pour ton aide
j'avais tapé un brin trop vite et ce n'était donc pas PREFIX_blog mais bien PREFIX_post à modifier
hello, cool, en effet ça marche,
toutefois j'ai un pb de mise à jour des données affichées...
je dois vider le cache de dotclear pour que les lectures de billets soient comptabilisées ...
dois-je enlever l'option "cache http" dans la config de dotclear ?
merci bien pour tt ça
je pense que si tu ajoutes la ligne qui suit après l'update dans post.php, ça peut régler le problème, cependant rafraîchir la cache à chaque lecture d'un billet c'est un peu comme désactiver la cache mais en pareil, à toi de voir donc
la ligne en question :
if(dc_http_cache == 1) files::touch(DC_UPDATE_FILE);
salut !
une p'tite idée là d'ssus ?
chuis embétée il me plait bien ton p'tit "plug-in" mais il ne se rafraichit pas et pourtant non seulement mon cache est 'soit-disant' (parce qu'il se remplit) désactivé dans la config dotclear, mais en plus j'ai ajouté la ligne que tu donnes ci-dessus... et pourtant, rien, ce qui est dommage parce que ça donne moins envie, forcément !!
bein en tout cas merci bien de l'initiative !!
bonne continuation, marie
eh bien si ton cache continue à se remplir c'est que tout ne doit pas être net de ce côté là
"dc_http_cache" est bien à 0 dans ton dotclear.ini ?
Voui m'sieur... fou hein ?? m'énerve particulièrement moi, j'aimerai bien l'afficher ce joli p'tit gizmo !
Je viens de remarquer que chez toi non plus ça mets pas à jour tout de suite... ça viendrait d'où ?
Bref, n'importe quelle aide est la bienvenue, et si tu préfères le mail surtout n'hésites pas !!
Merci encore !
Bon, j'y ai été "à la brutasse", j'ai viré le dossier "cache" sur mon serveur... et ça marche, et surtout oh miracle rien n'est cassé (que j'ai pu constater en tout cas) donc ouf !!
et surtout MERCI c'est super chouette !!
Bonne continuation, et vivement un "vrai" plug-in ! 
le plugin est disponible, voir cette page