Bonjour Tout le monde
je voudrai mettre en place un nombre de vu sur un site cakephp 2.x est ce que quelqu'un pourrait me donné une piste ?
merci

6 réponses


tincode
Auteur
Réponse acceptée

Merci lartak

Bonjour.
Ce serait bien que tu sois un minimum précis.
Tu veux par exemple faire un compteur concernant le nombre de fois qu'un article est vu en général, ou bien par visiteur unique ?
Si c'est le premier cas, ce ne sera pas révélatif, car si par exemple un visiteur rafraichit une même page d'un article plusieurs fois, l'article sera marqué comme vu autant de fois, ce qui ne sera pas représentatif.
Selon le résultat que tu attends, la méthode sera différente et ça peut influer sur la structure de ta base de données, donc sans plus de précisions de ta part, nous ne pourrons pas te proposer des pistes concrètes.
Et puis, as-tu déjà essayé quelque chose avant de venir nous demander de l'aide ?
Tu pourrais par exemple regarder le Tutoriel Système de sujets lus / non lus, ce n'est peut-être pas exactement le cas que tu demandes et ce n'est pas spécifique à CakePHP, mais ça te permettra de te donner des pistes sur la méthodologie à utiliser, ensuite, lorsque tu y verras plus clair, tu pourras toujours venir demander des précisions et/ou demander comment tirer profit du framework pour de meilleures performances par exemple.
Sinon, en général ce n'est pas bien compliqué, tu dois avoir une action qui te permet d'afficher un article en particulier, en général show ou view et l'orsque le visiteur appelle cette action, tu pourrais par exemple incrémenter un champ de la table de tes articles en relation avec l'article affiché, ce n'est bien sùr que la manière la plus basique et loin d'être la plus représentative, c'est pourquoi il nous est indispensable d'avoir plus de précisions sur ce que tu veux exactement.

tincode
Auteur

merci @lartak. mais ce que je veux cest le nombre de fois que la page est affichée mais si on actualise la page le compteur s'incremente

merci @lartak. mais ce que je veux cest le nombre de fois que la page est affichée mais si on actualise la page le compteur s'incremente

Tu veux donc fausser la réelle vue de tes articles.
Dans tous les cas, je t'ai donné plusieurs pistes, à toi d'en faire profit ou non.

tincode
Auteur

il s'agit pas de fausser les resultats mais juste un nombre de fois que la page a été affichée

il s'agit pas de fausser les resultats mais juste un nombre de fois que la page a été affichée

Tu avais pourtant dit :

je veux mettre un nombre de vu des articles

Ce sont deux choses différentes.
Pour information, je ne vois pas l'intérêt d'indiquer combien de fois un article a été affiché, par contre informer qu'un article à été vu par un certain nombre de personnes, à la rigueur oui.
Dans ce cas là, il te suffit par exemple de créer une table avec deux champs, l'un pour l'ip de la personne et l'autre pour l'article correspondant, donc son id.
Exemple :
-- Table views

  • ip
  • ref_id
  • ref

et dans l'action qui affiche un article :

public function view($id = null)
{
    if(!$id) {
        throw new NotFoundException(/* Message d'erreur */);
    }

    $this->Post->id = $id;

    if(!$this->Post->exists()) {
        throw new NotFoundException(/* Message d'erreur */);
    }

    $post = $this->Post->findById($id);

    $this->loadModel('Views');
    $clientIp = $this->request->clientIp();
    $entity = ['ref_id' => $id, 'ip' => $clientIp, 'ref' => 'Post'];
    $view = $this->View->find('first', ['conditions' => $entity]);

    if(!$view) {
        $this->View->save($entity, false);
        $this->Post->saveField('views', $post['Post']['views'] + 1); /* Ce champ doit bien sur exister dans la table des articles */
    }

    $this->set(compact('post'));
}

Ou alors, pour alléger ton code du côté controller, tu peux utiliser un Événements système.