Afficher les derniers commentaires ou articles dans la sidebar

Bonsoir,

Allez comme promis deux petites méthodes de la classe plxShow qui permettent d'afficher les derniers articles et les derniers commentaires

Classe plxShow modifié depuis la version pluxml blog beta 4.1

Derniers articles :

Ajouter cette méthode dans la classe plxShow :
/**
	 * Méthode qui affiche la liste des $max derniers articles.
	 * Si la variable $cat_id est renseignée, seulement les articles 
	 * de cette catégorie seront retournés.
	 *
	 * @param	format	format du texte pour chaque article (variable: #art_id,#art_url,#art_author,#art_title,#art_date,#art_hour)
	 * @param	max	nombre d'articles maximum
	 * @param	cat_id	id de la catégorie cible (1,home)
	 * @return	stdout
	 * @author	Florent MONTHEL
	 **/
	function lastArtList($format='<a href="#art_url" title="#art_title">#art_title</a>',$max=5,$cat_id='') {

		# 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,$max);
		# 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
			# On boucle sur nos articles
			while($plxRecord_arts->loop()) {
				$num = intval($plxRecord_arts->f('numero'));
				# On modifie nos motifs
				$row = str_replace('#art_id',$num,$format);
				$row = str_replace('#art_url','./?article'.$num.'/'.$plxRecord_arts->f('url'),$row);
				$row = str_replace('#art_author',htmlspecialchars($plxRecord_arts->f('author'),ENT_QUOTES,PLX_CHARSET),$row);
				$row = str_replace('#art_title',htmlspecialchars($plxRecord_arts->f('title'),ENT_QUOTES,PLX_CHARSET),$row);
				$row = str_replace('#art_date',plxUtils::dateIsoToHum($plxRecord_arts->f('date')),$row);
				$row = str_replace('#art_hour',plxUtils::heureIsoToHum($plxRecord_arts->f('date')),$row);
				# On genère notre ligne
				echo '<li>'.$row.'</li>';
			}
		}
	}
Cette méthode s'utilise ainsi dans les fichiers de votre thème :
<ul>
       <?php $plxShow->lastArtList(); ?>
</ul>
Par défaut :
- les 5 derniers articles publiés sont affichés.
- le format d'affichage est : <a href="#art_url" title="#art_title">#art_title</a>
- les variables disponibles sont : #art_id, #art_url, #art_author, #art_title, #art_date, #art_hour

Pour afficher par exemple les 3 derniers articles de la catégorie 5 :
<ul>
	<?php $plxShow->lastArtList('<a href="#art_url">#art_title</a> par #art_author le #art_date',3,5); ?>
</ul>
Derniers commentaires :

Ajouter cette méthode dans la classe plxShow :
/**
	 * Méthode qui affiche la liste des $max derniers commentaires.
	 * Si la variable $art_id est renseignée, seulement les commentaires 
	 * de cet article seront retournés.
	 *
	 * @param	format	format du texte pour chaque commentaire (variable: #com_id,#com_url,#com_author,#com_content(num),#com_content,#com_date,#com_hour)
	 * @param	max	nombre de commentaires maximum
	 * @param	art_id	id de l'article cible (24,3)
	 * @return	stdout
	 * @author	Florent MONTHEL
	 **/
	function lastComList($format='<a href="#com_url">#com_author a dit :</a><br/>#com_content(60)',$max=5,$art_id='') {

		# Génération de notre motif
		if(empty($art_id))
			$motif = '/^[0-9]{4}.[0-9]{10}-[0-9]+.xml$/';
		else
			$motif = '/^'.str_pad($art_id,4,'0',STR_PAD_LEFT).'.[0-9]{10}-[0-9]+.xml$/';
		# Nouvel objet plxGlob et récupération des fichiers
		$plxGlob_coms = & new plxGlob(PLX_ROOT.$this->plxMotor->aConf['racine_commentaires']);
		$aFiles = $plxGlob_coms->query($motif,'com','rsort',0,$max);
		# 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->parseCommentaire(PLX_ROOT.$this->plxMotor->aConf['racine_commentaires'].$v);
			# On stocke les enregistrements dans un objet plxRecord
			$plxRecord_coms = & new plxRecord($array);
		}
		if($plxGlob_coms->count AND $plxRecord_coms->size) { # On a des commentaires
			# On boucle sur nos articles
			while($plxRecord_coms->loop()) {
				# On modifie nos motifs
				$row = str_replace('#com_id',$plxRecord_coms->f('numero'),$format);
				$row = str_replace('#com_url','./?article'.intval($plxRecord_coms->f('article')).'/#c'.$plxRecord_coms->f('numero'),$row);
				$row = str_replace('#com_author',$plxRecord_coms->f('author'),$row);
				while(preg_match('/#com_content\(([0-9]+)\)/',$row,$capture))
					$row = str_replace('#com_content('.$capture[1].')',plxUtils::strCut($plxRecord_coms->f('content'),$capture[1]),$row);
				$row = str_replace('#com_content',$plxRecord_coms->f('content'),$row);
				$row = str_replace('#com_date',plxUtils::dateIsoToHum($plxRecord_coms->f('date')),$row);
				$row = str_replace('#com_hour',plxUtils::heureIsoToHum($plxRecord_coms->f('date')),$row);
				# On genère notre ligne
				echo '<li>'.$row.'</li>';
			}
		}
	}
Cette méthode s'utilise ainsi dans les fichiers de votre thème :
<ul>
	<?php $plxShow->lastComList(); ?>
</ul>
Par défaut :
- les 5 derniers commentaires publiés sont affichés.
- le format d'affichage est : <a href="#com_url">#com_author a dit :</a><br/>#com_content(60)
- les variables disponibles sont : #com_id, #com_url, #com_author, #com_content(num), #com_content, #com_date, #com_hour
- #com_content(60) signifie que l'on coupe le contenu du commentaire à 60 caractères. Pour l'afficher en entier, il faut utiliser la variable #com_content

Pour afficher par exemple les 6 derniers commentaires de l'article 2 :
<ul>
	<?php $plxShow->lastComList('<a href="#com_url">#com_author a dit :</a><br/>#com_content(60)',6,2); ?>
</ul>
Bien sûr ces méthodes seront intégrées dans la prochaine version de Pluxml.

Bonne soirée

Réponses

  • Merveilleux. Merci beaucoup Marama. J'ai testé pour les commentaires. cela fonctionne parfaitement.

    De grandes choses à faire demain.
    vivement demain....
  • knownknown Member
    Bonjour, je suis interressé par la mod des derniers articles dans le sidebar. (Très utile pour les news jeux vidéo de mon blog.)
    J'aimerais bien l'installer, mais vous pouvez m'expliquer "plxShow" ? :( Qu'est-ce donc ?
    Merci.
  • @known : "plxshow" correspond au fichier class.plxshow.php du dossier /core/lib/ de pluxml. Donc il faut ajouter la nouvelle fonction "lastArtList" comme indiquée par Marama.

    bonne chance...
  • knownknown Member
    avril 2009 modifié
    Je vois, merci. ;)
    EDIT: Bon voilà, j'ai bien copié-collé le premier code donné dans class.pxl.show.php (à la fin), je copie maintenant ce code dans ma sidebar :
    <ul> 
    			<?php $plxShow->lastArtList('<a href="#art_url">#art_title</a> par #art_author le #art_date',1,3); ?>
    		</ul>
    
    Et je rencontre cette erreur :
    Fatal error: Call to undefined function: lastartlist() in /mnt/156/sdb/3/b/keve.kv/goomba/themes/defaut/sidebar.php on line 11
    
    Bon, vu que je débute en PHP, je comprends pas très bien le problème. J'ai oublié de renseigner quelque chose ? Où est le problème ? :/

    En sachant que je n'ai publié qu'un seul article dans la 1ère catégorie. Bref, j'ai pas tout compris.
    Merci ...
  • knownknown Member
    Désolé du double-post ;
    je viens de voir ce lien : http://tmp.pluxml.org/beta4.2.3/class.plx.show.txt

    Mais il est mort... en sachant que j'utilise la bêta 4.1 de Pluxml. ;)
    Voilà, bon je sais pas si c'est le coeur du problème, mais bref.
  • ZacharielleZacharielle Member
    avril 2009 modifié
    Bonjour,

    moi aussi j'avais eu cette erreur. J'ai supposé que c'était parce que j'avais copié à la fin, peut-être avant le }. Tu n'as qu'à mettre le code dans la class show au début, c'est à dire juste après :
    <?php
    
    /**
     * Classe plxShow responsable de l'affichage sur stdout
     *
     * @package PLX
     * @author	Florent MONTHEL
     **/
    class plxShow {
    
    	var $plxMotor = false; # Objet plxMotor
    
    	/**
    	 * 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;
    	}
    
    --> COPIE ICI <--
    
    Pour moi, ça marche nickel, j'espère que ça ira pour toi aussi ;) Par ailleurs, je ne voulais pas flooder mais un grand merci, d'une part pour cette astuce et d'autre part, pour pluxml tout entier, j'adore !!
  • knownknown Member
    Ooooh ! Ca marche ! Nickel ! Merci beaucoup ! :D
    Je peux enfin modifier mon blog tranquillement... ^^
  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut known

    Je suis passé par ton site et une petite remarque concernant le code dans ta sidebar. Attention à ne pas utiliser plusieurs fois <div id="categories">. Cela génère du code non valide xhtml car la valeur d'un id doit être unique
    Pour ton agenda par exemple déclare <div id="agenda"> et si besoin adapte ton fichier css.

    Bonne continuation

    Stéphane.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • knownknown Member
    Arf oui mince, j'avais pas vu le "id" ... ^^'
    Je corrige ça tout de suite ! Merci pour ta remarque ! :)

    Ne nous éloignons pas trop du sujet non plus. ^^
  • Je confirme quant à l'intégration du code en fin du class.plx.show , cela génère une erreur, en ce qui me concerne je l'ai mis juste après la méthode d'affichage des articles, pour mieux m'y retrouver, et ça marche bien.

    Sinon une question, est-il possible de limiter le nombre de caractères à afficher pour le titre des articles ? Car du fait de ma mise en page, les titre des derniers articles affichés se retrouvent régulièrement sur deux lignes, ce qui est assez contraignant, je pourrais éventuellement retoucher ma mise en page, mais si une méthode permettait de limiter le nombre de caractères, ce serait plus cool :cool:.

    Merci d'avance, et merci pour ce code ma foi fort pratique ;).
  • AndreaAndrea Member
    Parfait! Ceci dit cela serait-il possible d'afficher, ces derniers articles et commentaires
    sur une page statique ?

    pour ne pas trop "sur-charger" la side-bar ;-) en fait...
  • maramamarama Member
    Tu peux appeler ces fonctions où tu veux normalement (fichiers du thème, pages statiques)...
  • AndreaAndrea Member
    Ok! Parfait... je ne savais pas

    Par contre si par exemple je crée une page statique "Up-Dates" avec juste ce code
    <h2>Derniers Articles</h2>
    	<ul>
    		<?php $plxShow->lastArtList(); ?>
    	</ul>
    <h2>Derniers Com...</h2>
    	<ul>
    		<?php $plxShow->lastComList(); ?>
    	</ul>
    
    J'ai cette erreur...
    Fatal error: Call to a member function on a non-object in /.../data/statiques/003.up-dates.php on line 3
    
  • un petit up pour le message ci-dessus.

    Moi aussi si je tente d'insérer
    <ul>
            <?php $plxShow->lastArtList(); ?>
        </ul>
    
    dans une de mes pages statiques j'obtiens l'erreur.

    Vous avez une idée ?
  • C'est normal en fait car vous ne pouvez pas utiliser des fonctions plxShow dans un fichier qui n'est pas un thème
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour
    SapinTremblant a écrit:
    un petit up pour le message ci-dessus.

    Moi aussi si je tente d'insérer
    <ul>
            <?php $plxShow->lastArtList(); ?>
        </ul>
    
    dans une de mes pages statiques j'obtiens l'erreur.

    Vous avez une idée ?
    Il est possible d'utiliser la fonction lasArtList dans une page statique à condition de mettre au début cette instruction
    <?php global $plxShow; ?>
    
    Stéphane

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • novembre 2009 modifié
    Génial, merci pour cette info. Cela m'ouvre de biens belles portes
Connectez-vous ou Inscrivez-vous pour répondre.