PluXml.org

Blog ou CMS à l'Xml

Suggestion de Lecture(Edit)

Ce Plugin permet d'afficher aléatoirement à vos visiteurs, 5 articles dans les 30 derniers de la catégorie courante.

Installation(Edit)

  1. Ajouter dans le fichier article.php

avant : <?php include(dirname(__FILE__).'/commentaires.php'); # On insere les commentaires ?> :

<h2>Je suggère aussi</h2>
    <ul>
    <?php include(dirname(__FILE__).'/suggestion.php'); ?>
    </ul>

  1. Suggestion des articles d'une catégorie précise :

Il faut remplacer la ligne : $suggest -> suggestion(5, $suggest->plxMotor->plxRecord_arts->f('categorie'), 30, $artId);

par $suggest -> suggestion(5, "001", 30, $artId);

Avec "001", la catégorie à lister (sur trois chiffres)

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

PluXml 5.1.3

<?php
	/**
	* 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
	* @param    exclude  id de l'article à exclure
	* @return   stdout
	* @author   Amaury GRAILLAT, Florent MONTHEL
	**/
	function suggestion ($max = 5, $cat_id = '', $maxSeek = 30, $exclude = -1)
	{
		# Récupération des instances :
		$plxShow_inst = plxShow::getInstance();
		$plxMotor_inst = plxMotor::getInstance();
	
		#Génération de notre motif
		if (empty ($cat_id))
			$motif = '/[0-9]{4}.[0-9,]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
		elseif ($cat_id == 'home')
			$motif = '/[0-9]{4}.(home[0-9,]*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
		else
			$motif = '/[0-9]{4}.[0-9,]*'.str_pad ($cat_id, 3, '0', STR_PAD_LEFT).'[0-9,]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';

		#Nouvel objet plxGlob et récupération des fichiers
		$plxGlob_arts = plxGlob::getInstance(PLX_ROOT.$plxShow_inst->plxMotor->aConf['racine_articles']);

		$aFiles = $plxGlob_arts->query ($motif, 'art', 'rsort', 0, $maxSeek, 'before');

		#On parse les fichiers
		if (is_array ($aFiles))
		{
			#On a des fichiers
			foreach ($aFiles as $v)
			{
				#On parcourt tous les fichiers
				$array[] = $plxShow_inst->plxMotor->parseArticle (PLX_ROOT.$plxShow_inst->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;

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

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

				$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.
			}
		}
	}

	$plxShow_inst = plxShow::getInstance();
	$plxMotor_inst = plxMotor::getInstance();
	
	$artId = $plxMotor_inst->plxRecord_arts->f ('numero');	//cet article
	
	// Gestion du multi-catégorie : prend une des catégories au hasard.
	$catIdSel = $plxMotor_inst->plxRecord_arts->f ('categorie');
	$catIdSel = explode (',', $catIdSel);
	$catIdSel = array_rand ($catIdSel);
		
	suggestion (5, $catIdSel, 30, $artId);
?>

PluXml 5.1.2

<?php

    /**
     * Constructeur qui initialise l'objet plxMotor par référence
     *
     * @param     plxMotor    objet plxMotor passé par référence
     * @return    null
     * @version   1.5
     * @pluxml    5.0
     * @author    Amaury GRAILLAT
     **/
    class plxSuggest extends plxShow
    {     
        /**
        * 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,]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';

			elseif($cat_id == 'home')

				$motif = '/[0-9]{4}.(home[0-9,]*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';

			else

				$motif = '/[0-9]{4}.[0-9,]*'.str_pad($cat_id,3,'0',STR_PAD_LEFT).'[0-9,]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';

            # Nouvel objet plxGlob et récupération des fichiers
			$plxGlob_arts = plxGlob::getInstance(PLX_ROOT.$this->plxMotor->aConf['racine_articles']);

			$aFiles = $plxGlob_arts->query($motif,'art','rsort',0,$maxSeek,'before');

            # On parse les fichiers
            if(is_array($aFiles)) { # On a des fichiers
				foreach($aFiles as $v) { # On parcourt tous les fichiers
                    $array[] = $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;
                
                # On boucle sur nos articles
                $used = array();
                $loop = 0;

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

                    $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
    // Gestion du multi-catégorie : prend une des catégories au hasard.
    $catIdSel = $suggest->plxMotor->plxRecord_arts->f('categorie');
    $catIdSel = explode(',', $catIdSel);
    $catIdSel = array_rand($catIdSel);
    $suggest -> suggestion(5, $catIdSel, 30, $artId);
?>

PluXml 4.3

<?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
                foreach($aFiles as $k => $v) # 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)
                {
                    while($antilag = 0; $antilag < $maxPars*2; $antilag++)
                    {
                        $plxRecord_arts->i = rand(1, $maxPars);
                        if(!$used[$plxRecord_arts->i])
                        {
                            $used[$plxRecord_arts->i] = true;
                            break;
                        }
                    }              

                    $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);
?>

Note:(Edit)

Si vous souhaitez utiliser ce script dans la même page que "home.php".

Cette ligne empêchera son bon fonctionnement:

$artId = $suggest->plxMotor->plxRecord_arts->f('numero'); //cet article

Version initiale créée par Amoweb