Changer l'ordre des commentaires pour un seul article

Bonjour,

Dans les paramètres, on peut définir l'ordre d'affichage global des commentaires.
J’aimerai changer l'ordre d'affichage des commentaires pour un seul article.
Comment je peux faire pour modifier l'ordre pour cet article ?

Réponses

  • Bonjour,

    Le plus simple est de réaliser une condition php en fonction de id de la page et de réaliser un affichage en ordre inversé des commentaires
  • comment ?
  • niqnutnniqnutn Member
    octobre 2016 modifié
    à défaut de trouver une solution pour changer l'ordre de tri pour l'affichage des commentaires sur un article particulier, j'ai trouvé une rustine.

    je vais essayer avec la fonction lastComList
    la doc: http://devzone.pluxml.org/index.php?page=plxShow-lastComList
    [== PHP ==]
    <?php $plxShow->lastComList('<li><a href="#com_url">#com_author a dit :</a><p>#com_content</p>#com_date à #com_hour</li>',30,38) ?>
    

    les commentaires sont affichés du plus récents aux plus vieux comme j'ai besoin.
    on peut définir le format du commentaire.
    par contre, on a pas les valeurs du site ni l'email disponible :mad:

    en modifiant class.plx.show.php, on peut récupérer les 2 valeurs.
    il y a juste 2 lignes à rajouter (il suffit de rechercher // MODIFICATION dans le pavé)
    [== PHP ==]
    	/**
    	 * Méthode qui affiche la liste des $max derniers commentaires.
    	 * Si la variable $art_id est renseignée, seuls les commentaires de cet article sont retournés.
    	 *
    	 * @param	format	format du texte pour chaque commentaire
    	 * @param	max		nombre de commentaires maximum
    	 * @param	art_id	id de l'article cible (24,3)
    	 * @param	cat_ids	liste des categories pour filtrer les derniers commentaires (sous la forme 001|002)
    	 * @return	stdout
    	 * @scope	global
    	 * @author	Florent MONTHEL, Stephane F
    	 **/
    	public function lastComList($format='<li><a href="#com_url">#com_author L_SAID :</a><br/>#com_content(50)</li>',$max=5,$art_id='',$cat_ids='') {
    
    		# Hook Plugins
    		if(eval($this->plxMotor->plxPlugins->callHook('plxShowLastComList'))) return;
    
    		# 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$/';
    
    		$count=1;
    		$datetime=date('YmdHi');
    		# Nouvel objet plxGlob et récupération des fichiers
    		$plxGlob_coms = clone $this->plxMotor->plxGlob_coms;
    		if($aFiles = $plxGlob_coms->query($motif,'com','rsort',0,false,'before')) {
    			$aComArtTitles = array(); # tableau contenant les titres des articles
    			$isComArtTitle = (strpos($format, '#com_art_title')!=FALSE) ? true : false;
    			# On parcourt les fichiers des commentaires
    			foreach($aFiles as $v) {
    				# On filtre si le commentaire appartient à un article d'une catégorie inactive
    				if(isset($this->plxMotor->activeArts[substr($v,0,4)])) {
    					$com = $this->plxMotor->parseCommentaire(PLX_ROOT.$this->plxMotor->aConf['racine_commentaires'].$v);
    					$artInfo = $this->plxMotor->artInfoFromFilename($this->plxMotor->plxGlob_arts->aFiles[$com['article']]);
    					if($artInfo['artDate']<=$datetime) { # on ne prends que les commentaires pour les articles publiés
    						if(empty($cat_ids) OR preg_match('/('.$cat_ids.')/', $artInfo['catId'])) {
    							$url = '?article'.intval($com['article']).'/'.$artInfo['artUrl'].'#c'.$com['numero'];
    							$date = $com['date'];
    							$content = strip_tags($com['content']);
    							# On modifie nos motifs
    							$row = str_replace('L_SAID', L_SAID, $format);
    							$row = str_replace('#com_id',$com['numero'],$row);
    							$row = str_replace('#com_url',$this->plxMotor->urlRewrite($url),$row);
    							$row = str_replace('#com_mail',$com['mail'],$row); // MODIFICATION
    							$row = str_replace('#com_site',$com['site'],$row); // MODIFICATION
    							$row = str_replace('#com_author',$com['author'],$row);
    							while(preg_match('/#com_content\(([0-9]+)\)/',$row,$capture)) {
    								if($com['author'] == 'admin')
    									$row = str_replace('#com_content('.$capture[1].')',plxUtils::strCut($content,$capture[1]),$row);
    								else
    									$row = str_replace('#com_content('.$capture[1].')',plxUtils::strCheck(plxUtils::strCut(plxUtils::strRevCheck($content),$capture[1])),$row);
    							}
    							$row = str_replace('#com_content',$content,$row);
    							$row = str_replace('#com_date',plxDate::formatDate($date,'#num_day/#num_month/#num_year(4)'),$row);
    							$row = str_replace('#com_hour',plxDate::formatDate($date,'#hour:#minute'),$row);
    							$row = plxDate::formatDate($date,$row);
    							# récupération du titre de l'article
    							if($isComArtTitle) {
    								if(isset($aComArtTitles[$com['article']])) {
    									$row = str_replace('#com_art_title',$aComArtTitles[$com['article']],$row);
    								}
    								else {
    									if($file = $this->plxMotor->plxGlob_arts->query('/^'.$com['article'].'.(.*).xml$/')) {
    										$art = $this->plxMotor->parseArticle(PLX_ROOT.$this->plxMotor->aConf['racine_articles'].$file[0]);
    										$aComArtTitles[$com['article']] = $art_title = $art['title'];
    										$row = str_replace('#com_art_title',$art_title,$row);
    									}
    								}
    							}
    							# On genère notre ligne
    							echo $row;
    							$count++;
    						}
    					}
    				}
    				if($count>$max) break;
    			}
    		}
    	}
    


    J'espère que Stéphane fera les modifications dans la prochaine version.
    Je ne sais pas s'il est utile d'ajouter "mail" et ça pourrait poser pb (j'en ai pas besoin non plus).
    j'avais mis mes modifs après "$row = str_replace('#com_content',$content,$row);" mais si on met le motif #com_site ou #com_mail dans le commentaire, l'url et l'email s'affichait (c'est logique mais c'est pas le comportement souhaité).
  • personne n'a d'idée pour modifier l'ordre des commentaires d'un article.
    la solution que j'utilise pour le moment impose certaines limites.
  • YannicYannic Member
    février 2017 modifié
    Pour ma part, si n'existe pas de fonction, je ferais un template article-xxx.php pour cet article qui chargera commentaires-xxx.php pour cet article.

    Ensuite dans le template commentaires-xxx.php

    Je mettrais ce qui est normallement affiché par la boucle dans un array php qu'il suffira de trier en sens inverse puis de l'afficher

    Mais cela depends du nombre de commentaires attendus à la longue, une 20aine de commentaires sera correcte tandis qu'un millier le sera moins.

    Buster/NGINX/PHP7/PluXml5.8

Connectez-vous ou Inscrivez-vous pour répondre.