PluXml.org

Blog ou CMS à l'Xml

Vous n'êtes pas identifié(e).

#1 06/08/2009 22:49:03

amoweb
Membre
Lieu : Valence
Inscription : 05/08/2009
Messages : 277
Site Web

[PLUGIN] Suggérer la lecture

J'ai fais un script pour faire une suggestion de lecture. Il prend aléatoirement 5 articles dans les 30 derniers de la catégorie courante.

Ajouter dans le fichier article.php :

<h1 class='suggestion-title'>Je suggère aussi</h1>
    <ul>
    <?php include('suggestion.php'); ?>
    </ul>

Fichier suggestion.php (à créer dans le dossier du thème) :

<?php

    /**
     * Constructeur qui initialise l'objet plxMotor par référence
     *
     * @param     plxMotor    objet plxMotor passé par référence
     * @return    null
     * @version   1.3
     * @author    Amaury GRAILLAT
     **/
    class plxSuggest extends plxShow
    {
        /**
         * Constructeur qui initialise l'objet plxMotor par référence
         *
         * @param    plxMotor    objet plxMotor passé par référence
         * @return    null
         * @author    Florent MONTHEL
         **/

        function PlxShow(&$plxMotor)
        {
            $this->plxMotor = &$plxMotor;
        }
        
        /**
        * Méthode qui affiche une liste d'articles au hasard dans la même catégorie.
        *
        * @param    max      nombre d'articles maximum affichés
        * @param    cat_id   id de la catégorie cible (1,home)
        * @param    maxSeek  nombres d'articles les plus rescents à parser (choisit aléatoirement entre 1 et $maxSeek)
        * @param    exclude  id de l'article à exclure
        * @return   stdout
        * @author   Amaury GRAILLAT, Florent MONTHEL
        **/

        function suggestion($max=5, $cat_id='', $maxSeek=30, $exclude = -1)
        {

            # Génération de notre motif
            if(empty($cat_id))
                $motif = '/^[0-9]{4}.([0-9]{3}|home).[0-9]{12}.[a-z0-9-]+.xml$/';
            elseif($cat_id == 'home')
                $motif = '/^[0-9]{4}.home.[0-9]{12}.[a-z0-9-]+.xml$/';
            else
                $motif = '/^[0-9]{4}.'.str_pad($cat_id,3,'0',STR_PAD_LEFT).'.[0-9]{12}.[a-z0-9-]+.xml$/';


            # Nouvel objet plxGlob et récupération des fichiers
            $plxGlob_arts = & new plxGlob(PLX_ROOT.$this->plxMotor->aConf['racine_articles']);
            $aFiles = $plxGlob_arts->query($motif,'art','rsort',0,$maxSeek);


            # On parse les fichiers
            if(is_array($aFiles)) { # On a des fichiers
                while(list($k,$v) = each($aFiles)) # On parcourt tous les fichiers
                    $array[ $k ] = $this->plxMotor->parseArticle(PLX_ROOT.$this->plxMotor->aConf['racine_articles'].$v);

                # On stocke les enregistrements dans un objet plxRecord
                $plxRecord_arts = & new plxRecord($array);

            }

            

            if($plxGlob_arts->count AND $plxRecord_arts->size) { # On a des articles

                //Pas plus qu'on en a...
                if($maxSeek > $plxGlob_arts->count)
                    $maxPars = $plxGlob_arts->count - 1;
                else $maxPars = $maxSeek - 1;
                
                if($max > $maxPars) $max = $maxPars;
                
                // $plxRecord_arts->i < $plxGlob_arts->count

                # On boucle sur nos articles
                $used = array();
                $loop = 0;

                while($loop < $max)
                {
                    $antilag = 0;
                    while($antilag < $maxPars*2)
                    {
                        $plxRecord_arts->i = rand(1, $maxPars);
                        if(!$used[$plxRecord_arts->i])
                        {
                            $used[$plxRecord_arts->i] = true;
                            break;
                        }
                        $antilag++;
                    }              

                    $num = intval($plxRecord_arts->f('numero'));
              
                    if($num != $exclude && $antilag < $maxPars*2) //Si l'article n'est pas exclu, on l'affiche
                    {
                        # On genère notre ligne
                        $row = '<a href="' . './?article'.$num.'/'.$plxRecord_arts->f('url') . '">'
                        . htmlspecialchars($plxRecord_arts->f('title'),ENT_QUOTES,PLX_CHARSET) . '</a>';
                        echo '<li>'.$row.'</li>';
                        $loop++;
                    }
                    else $loop += 0.1; // Système antilag, mais évite quand même d'afficher
                                       // que 4 titres au lieu de 5 quand on a trouvé un exclu. J'assume.
                }
            }
        }
    };

    $suggest = & new plxSuggest($plxMotor);
    $artId = $suggest->plxMotor->plxRecord_arts->f('numero'); //cet article
    $suggest -> suggestion(5, $suggest->plxMotor->plxRecord_arts->f('categorie'), 30, $artId);
?>

Edit : Correction d'un bug s'il y a moins de $max articles dans la catégorie.
Edit 2 : Empêche la suggestion de l'article courant.
Edit 3 : Il y existe une nouvelle version de ce script (un peu plus bas dans la conversation : http://forum.pluxml.org/viewtopic.php?pid=11672#p11672)

Dernière modification par amoweb (22/01/2010 22:42:10)

Hors ligne

#2 07/08/2009 08:05:44

Hamtaro
Membre
Lieu : Niort
Inscription : 12/06/2007
Messages : 827
Site Web

Re : [PLUGIN] Suggérer la lecture

Excellent, je vais tester cela de suite ! smile

Hors ligne

#3 07/08/2009 10:14:09

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 151
Site Web

Re : [PLUGIN] Suggérer la lecture

Salut amoweb

Voilà une fonction intéressante. Merci de partager ton code

Quelques remarques...

1) Afin d'optimiser ton code, il est inutile de parser l'ensemble des articles alors que seul 5 articles sont attendus. Je te conseille de récupérer les fichiers, d'en sélectionner 5 au hasard et seulement après de les parser récupérer le contenu. Tu gagneras en temps de réponse et en traitement inutile.

2)

htmlspecialchars($plxRecord_arts->f('title'),ENT_QUOTES,PLX_CHARSET)

doit être remplacé par

plxUtils::strCheck($plxRecord_arts->f('title'))

3) Afin de rendre le code plus clair il serait plus intéressant de créer une fonction dans ta classe qui renvoie un tableau de n chiffres aléatoires, avec en paramètre le nombre de valeurs aléatoires à définir.
ça allègera ta fonction suggestion.

Stéphane

ps: petite précision pour ceux qui essayerait le code de amoweb, le fichier suggestion.php et à mettre dans le dossier de votre thème


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#4 07/08/2009 14:07:11

amoweb
Membre
Lieu : Valence
Inscription : 05/08/2009
Messages : 277
Site Web

Re : [PLUGIN] Suggérer la lecture

Merci pour vos messages!
Je viens de corriger un bug quand il y a moins d'articles dans la catégorie que ce que l'on demande d'afficher.
Ma version de pluxml ne dispose pas de la fonction strCheck. Je verrai un peu plus tard pour les optimisations.
Amaury

Hors ligne

#5 07/08/2009 18:04:07

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 151
Site Web

Re : [PLUGIN] Suggérer la lecture

En effet pour strCheck smile. C'est une fonction qui sera dispo dans la prochaine version de pluxml.
A force de travailler sur la 4.2 ça m'est sorti de la tête que cette fonction n'est pas encore dispo.


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#6 18/01/2010 18:04:47

antistress
Membre
Inscription : 28/12/2009
Messages : 354
Site Web

Re : [PLUGIN] Suggérer la lecture

C'est une bonne idée qui aurait sa place au wiki, ça :-)

Hors ligne

#7 19/01/2010 10:04:46

Hamtaro
Membre
Lieu : Niort
Inscription : 12/06/2007
Messages : 827
Site Web

Re : [PLUGIN] Suggérer la lecture

Je ne comprends pas ta démarche dans le forum antistress. Ce sont justes des remarques, ne voit rien d'offosant là dedans. wink
Tu fais du repérage pour toi en remontant les vieux topics, pour indiquer aux autres qu'il faut le mettre dans le wiki ou tu vas le mettre plus tard dans le wiki ?

Parce que je t'ai déjà indiqué que tu pouvais l'ajouter toi même si tu le souhaites dans le wiki : on est toujours mieux servi par soi-même tu sais. tongue

Hors ligne

#8 19/01/2010 11:32:53

antistress
Membre
Inscription : 28/12/2009
Messages : 354
Site Web

Re : [PLUGIN] Suggérer la lecture

Pas d'offense, ne t'en fais pas :-)
Je comprends que ça paraisse étrange
La démarche des wiki m'est familière (par exemple je contribue régulièrement à wikipédia) et dans la limite de mes moyens j'ai complété celui de PluXml (création notamment des pages Gestion des commentaires / Gestion des pages statiques / Gestion des flux de syndication)
Par contre n'ayant pas de connaissance suffisante du code, il ne serait pas raisonnable que je me charge d'astuces comme ici car renseigner des bêtises dans le wiki serait contre-productif.
Néanmoins je trouve certaines astuces intéressantes et pense que le projet gagnerait à les centraliser et à les rendre plus visibles c'est pourquoi je le fais remarquer
Il ne s'agit pas pour moi d'attendre que ça me tombe cuit dans la bouche, c'est juste de la prudence de ma part :-)

Hors ligne

#9 19/01/2010 14:12:45

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 151
Site Web

Re : [PLUGIN] Suggérer la lecture

C'est vrai qu'alimenter et maintenir à jour le wiki est un travail en soit.
Si quelqu'un pouvait prendre en charge la partie "manuel utilisateur" en complétant ce qui existe déjà sur le wiki serait vraiment bénéfique pour les nouvels utilisateurs qui découvrent pluxml (et peut être aussi pour les plus confirmés qui passeraient à coté de fonctionnalités - à condition de se donner la peine d'aller lire le wiki).


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#10 19/01/2010 14:30:19

antistress
Membre
Inscription : 28/12/2009
Messages : 354
Site Web

Re : [PLUGIN] Suggérer la lecture

J'ai prévu de m'attaquer à la page "Gestion des images" prochainement.
Lorsque j'aurais fait joujou avec les documents, je pourrai m'occuper de la page "Gestion des documents" à ce moment là
Il est super le wiki, très pratique pour des débutants (il suffit de copier-coller le code, et aussi pour apprendre du coup)

Hors ligne

#11 19/01/2010 16:45:44

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 151
Site Web

Re : [PLUGIN] Suggérer la lecture

Toute contribution que tu pourras apporter dans le wiki est la bienvenue
Merci d'avance en tout cas pour ton initiative.


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#12 22/01/2010 15:24:19

Hamtaro
Membre
Lieu : Niort
Inscription : 12/06/2007
Messages : 827
Site Web

Re : [PLUGIN] Suggérer la lecture

Le code a été optimisé pour la nouvelle version ou il n'y a rien à faire de plus en particulier ?

Hors ligne

#13 22/01/2010 15:35:37

Frédéric
Membre
Inscription : 03/06/2009
Messages : 2 533

Re : [PLUGIN] Suggérer la lecture

Le code est différent lorsque l'on le compare à une 4.3.

Testé à l'état brut avec des erreurs sad

Dernière modification par Fred (22/01/2010 15:36:21)

Hors ligne

#14 22/01/2010 22:40:17

amoweb
Membre
Lieu : Valence
Inscription : 05/08/2009
Messages : 277
Site Web

Re : [PLUGIN] Suggérer la lecture

Il y a en effet quelques modifications à appliquer (je n'ai malheuresement pas pensé à les préciser sur le forum). J'ai supprimé les & avant les objets qui étaient utiles avant PHP5. Voilà la nouvelle version :

<?php

    /**
     * Constructeur qui initialise l'objet plxMotor par référence
     *
     * @param     plxMotor    objet plxMotor passé par référence
     * @return    null
     * @version   1.4
     * @author    Amaury GRAILLAT
     **/
    class plxSuggest extends plxShow
    {
        /**
         * Constructeur qui initialise l'objet plxMotor par référence
         *
         * @param    plxMotor    objet plxMotor passé par référence
         * @return    null
         * @author    Florent MONTHEL
         **/

        function PlxShow($plxMotor)
        {
            $this->plxMotor = $plxMotor;
        }
        
        /**
        * Méthode qui affiche une liste d'articles au hasard dans la même catégorie.
        *
        * @param    max      nombre d'articles maximum affichés
        * @param    cat_id   id de la catégorie cible (1,home)
        * @param    maxSeek  nombres d'articles les plus rescents à parser (choisit aléatoirement entre 1 et $maxSeek)
        * @param    exclude  id de l'article à exclure
        * @return   stdout
        * @author   Amaury GRAILLAT, Florent MONTHEL
        **/

        function suggestion($max=5, $cat_id='', $maxSeek=30, $exclude = -1)
        {

            # Génération de notre motif
            if(empty($cat_id))
                $motif = '/^[0-9]{4}.([0-9]{3}|home).[0-9]{12}.[a-z0-9-]+.xml$/';
            elseif($cat_id == 'home')
                $motif = '/^[0-9]{4}.home.[0-9]{12}.[a-z0-9-]+.xml$/';
            else
                $motif = '/^[0-9]{4}.'.str_pad($cat_id,3,'0',STR_PAD_LEFT).'.[0-9]{12}.[a-z0-9-]+.xml$/';


            # Nouvel objet plxGlob et récupération des fichiers
            $plxGlob_arts = new plxGlob(PLX_ROOT.$this->plxMotor->aConf['racine_articles']);
            $aFiles = $plxGlob_arts->query($motif,'art','rsort',0,$maxSeek);


            # On parse les fichiers
            if(is_array($aFiles)) { # On a des fichiers
                while(list($k,$v) = each($aFiles)) # On parcourt tous les fichiers
                    $array[ $k ] = $this->plxMotor->parseArticle(PLX_ROOT.$this->plxMotor->aConf['racine_articles'].$v);

                # On stocke les enregistrements dans un objet plxRecord
                $plxRecord_arts = new plxRecord($array);

            }

            

            if($plxGlob_arts->count AND $plxRecord_arts->size) { # On a des articles

                //Pas plus qu'on en a...
                if($maxSeek > $plxGlob_arts->count)
                    $maxPars = $plxGlob_arts->count - 1;
                else $maxPars = $maxSeek - 1;
                
                if($max > $maxPars) $max = $maxPars;
                
                // $plxRecord_arts->i < $plxGlob_arts->count

                # On boucle sur nos articles
                $used = array();
                $loop = 0;

                while($loop < $max)
                {
                    $antilag = 0;
                    while($antilag < $maxPars*2)
                    {
                        $plxRecord_arts->i = rand(1, $maxPars);
                        if(!$used[$plxRecord_arts->i])
                        {
                            $used[$plxRecord_arts->i] = true;
                            break;
                        }
                        $antilag++;
                    }              

                    $num = intval($plxRecord_arts->f('numero'));
              
                    if($num != $exclude && $antilag < $maxPars*2) //Si l'article n'est pas exclu, on l'affiche
                    {
                        # On genère notre ligne
                        $row = '<a href="' . './?article'.$num.'/'.$plxRecord_arts->f('url') . '">'
                        . htmlspecialchars($plxRecord_arts->f('title'),ENT_QUOTES,PLX_CHARSET) . '</a>';
                        echo '<li>'.$row.'</li>';
                        $loop++;
                    }
                    else $loop += 0.1; // Système antilag, mais évite quand même d'afficher
                                       // que 4 titres au lieu de 5 quand on a trouvé un exclu. J'assume.
                }
            }
        }
    };

    $suggest = new plxSuggest($plxMotor);
    $artId = $suggest->plxMotor->plxRecord_arts->f('numero'); //cet article
    $suggest -> suggestion(5, $suggest->plxMotor->plxRecord_arts->f('categorie'), 30, $artId);
?>

Hors ligne

#15 22/01/2010 22:49:15

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 151
Site Web

Re : [PLUGIN] Suggérer la lecture

Je me suis permis de passer le n° de version de ton script de 1.3 en 1.4 wink


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#16 23/01/2010 00:26:28

Frédéric
Membre
Inscription : 03/06/2009
Messages : 2 533

Re : [PLUGIN] Suggérer la lecture

Merci Amoweb, Ajouté dans le wiki.

Dernière modification par Fred (23/01/2010 00:48:58)

Hors ligne

#17 10/07/2013 23:27:52

AirW
Membre
Lieu : - 22 -
Inscription : 11/01/2011
Messages : 243

Re : [PLUGIN] Suggérer la lecture

Bonjour !

Merci pour cette bonne idée !
J'ai tenté d'installer ce plugin. Outre le fait qu'il me casse tous mes beaux boutons «j'aime» et autres, il m'affiche une désobligeante

[== Indéfini ==]
Fatal error: Call to protected plxShow::__construct() from invalid context in /htdocs/themes/GEN22/suggestion.php on line 112

Que faire ? Help ! Où m'ai-je gouré ?

D'avance merci !

Dernière modification par AirW (11/07/2013 19:25:41)

Hors ligne

#18 15/07/2013 23:51:28

AirW
Membre
Lieu : - 22 -
Inscription : 11/01/2011
Messages : 243

Re : [PLUGIN] Suggérer la lecture

Bon, mon problème est résolu. Ne me demandez pas pourquoi. Je peux juste vous dire que j'ai pris le script du wiki à la place de ceux qui apparaissent dans ce fil de discussion.

Reste une question : suivant les articles. il peut n'y avoir aucune proposition alors qu'il y a des articles dans la catégorie... Est-ce normal ? Comment les articles appartenant à plusieurs catégories sont-ils gérés ?

Merci de votre aide !

Hors ligne

#19 16/07/2013 09:39:57

Jerry Wham
Membre
Inscription : 13/07/2011
Messages : 2 419
Site Web

Re : [PLUGIN] Suggérer la lecture

Je pense qu'il faut mettre cette astuce au goût du jour car ce fil de discussion est vieux et pluxml a évolué.


Mangez un castor, vous sauverez un arbre !

J'ai la tête dans le  ...code

Hors ligne

#20 16/07/2013 13:16:10

AirW
Membre
Lieu : - 22 -
Inscription : 11/01/2011
Messages : 243

Re : [PLUGIN] Suggérer la lecture

A priori le script prévu pour la 5.1.3 marche sur la 5.1.7... au détail signalé plus haut près...
On pourrait peut-être améliorer en ajoutant au titre tout ou partie du chapô des articles suggérés.

Dernière modification par AirW (16/07/2013 13:17:41)

Hors ligne

#21 27/04/2014 16:55:15

LolYangccool
Membre
Inscription : 26/10/2013
Messages : 493
Site Web

Re : [PLUGIN] Suggérer la lecture

Bonjour,
J'ai mis en place ce plugin mais celui-ci suggère des articles de toutes les catégories alors que d'après ce que j'ai compris, il ne doit suggérer que les articles de la catégorie courante...

Quelqu'un a une idée d'où cela peut venir ?

Merci. smile

Edit : Mon site tourne sous la 5.3.1. wink

Dernière modification par LolYangccool (27/04/2014 16:56:06)

Hors ligne

#22 29/04/2014 10:29:08

P3ter
Pluxml Staff
Lieu : Ile De France
Inscription : 17/10/2011
Messages : 269
Site Web

Re : [PLUGIN] Suggérer la lecture

Salut,

Le script est ancien et probablement doit être adapté à une version récente de PluXml.
Par ailleurs, tu peux essayer ceci : http://pluxopolis.net/article35/pluxml- … s-articles


PluXml sur Twitter : @pluxml
PluXml sur Google+ : +pluXml
--
Mon Twitter : @p3terfr
Mon blog : p3ter.fr

Hors ligne

#23 23/04/2016 20:36:51

bg62
Membre
Inscription : 18/05/2007
Messages : 1 779
Site Web

Re : [PLUGIN] Suggérer la lecture

à mon tour de 'réveiller' ce vieux post, juste pour montrer un petit nouveau probl-me ... depuis la sortie de PluXml 5.5 :
http://forum.pluxml.org/viewtopic.php?pid=48910#p48910
ce serait bien un p'tit coup de main smile
ops


le 'www' est fait pour communiquer et échanger, non ?
fonds d'écran   | référencement efficace | Portfolio | Fonds d'écran automobile | outils SEO | échange de liens en dur

Hors ligne

#24 23/04/2016 23:32:41

Pierre
Membre
Lieu : La belle province
Inscription : 22/06/2014
Messages : 1 041

Re : [PLUGIN] Suggérer la lecture

Je me demande pourquoi utiliser un plugin pour extraire un article quand lastArtList fait très bien le travail.  Stéphane m'a donné la routine pour extraire la catégorie courante et je l'insère tout simplement comme paramètre dans ma fonction préférée, par exemple:

<?php $plxShow->lastArtList('Vous aimerez aussi : <a class="#art_status" href="#art_url" title="#art_title">#art_title</a>',1,ltrim($plxShow->plxMotor->plxRecord_arts->f('categorie'),'home,')); ?>

C'est un peu sommaire mais ça sert d'exemple.  On voit ce genre de chose au bas d'un article, j'imagine que c'est l'usage prévu.


#titanic {
    float: none;
    bottom: 0;
}

Hors ligne

#25 24/04/2016 11:35:02

bg62
Membre
Inscription : 18/05/2007
Messages : 1 779
Site Web

Re : [PLUGIN] Suggérer la lecture

@Pierre : tout simplement parce que ce ' système ' de suggestion je l'utilise depuis x versions de Pluxml, mais que je rencontre quelques problèmes avec la 5.5, pourrais-tu voir de plus près ici : http://forum.pluxml.org/viewtopic.php?id=5490
ça me dépannerait vraiment bien, il ne me reste que 'ce' problème pour faire une mise à jour complète du site smile


le 'www' est fait pour communiquer et échanger, non ?
fonds d'écran   | référencement efficace | Portfolio | Fonds d'écran automobile | outils SEO | échange de liens en dur

Hors ligne

Pied de page des forums

A propos Nous soutenir Contact Twitter Google+
Copyright © 2006-2017 PluXml.org, tous droits réservés