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 ?
[== 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é).
Réponses
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
je vais essayer avec la fonction lastComList
la doc: http://devzone.pluxml.org/index.php?page=plxShow-lastComList
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é)
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é).
la solution que j'utilise pour le moment impose certaines limites.
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