Fonction lastComList : Ajouter #com_art_title (Titre de l'article)
Suricat
Member
Bonjour,
C'est utile de connaître le titre de l'article sur lequel un commentaire est déposé.
On peut par exemple vouloir afficher le titre de l'article auquel un commentaire fait référence, au-dessus du commentaire, ou en tooltip (balise title).
On voit aussi souvent l'équivalent de :
Après, je comprend que ça diminuerai un petit peu la vitesse d'affichage d'aller chercher le titre de l'article pour les derniers commentaires.
Peut-être est-il judicieux de dupliquer le titre de l'article dans les fichiers xml des commentaires. Cela allongerait seulement le temps d'exécution lors d'un changement de titre sur un ancien article (pour mettre à jour les fichiers xml des commentaires associés), ce qui n'est pas fréquent...
C'est utile de connaître le titre de l'article sur lequel un commentaire est déposé.
On peut par exemple vouloir afficher le titre de l'article auquel un commentaire fait référence, au-dessus du commentaire, ou en tooltip (balise title).
On voit aussi souvent l'équivalent de :
[== Indéfini ==]
<li>#com_author sur <a href="#com_url">#com_art_title</a>
<p>#com_content(50)</p>
</li>
Après, je comprend que ça diminuerai un petit peu la vitesse d'affichage d'aller chercher le titre de l'article pour les derniers commentaires.
Peut-être est-il judicieux de dupliquer le titre de l'article dans les fichiers xml des commentaires. Cela allongerait seulement le temps d'exécution lors d'un changement de titre sur un ancien article (pour mettre à jour les fichiers xml des commentaires associés), ce qui n'est pas fréquent...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je testerai ça dès que possible.
Par contre, reste le problème des performances. Aller chercher le titre des articles correspondant à chacun des derniers commentaires, un par un, ce n'est pas très performant.
Faire de la dénormalisation en dupliquant le titre de l'article dans le fichier des commentaires peut être justifié dans un logiciel sans base de données comme PluXml, non ?
Mais je maintiens que ce n'est pas très performant. La boucle est dans la fonction lastComList().
Je pense finalement avoir trouvé la solution :
Modifier la fonction lastComList en ajoutant "#com_art_title".
La plupart des derniers commentaires étant souvent faits sur le dernier article publié, le mieux est alors de stocker temporairement dans un tableau d'association les titres d'articles récupérés dans la boucle. Si les trois derniers commentaires sont faits sur le même article, alors on aura eu à chercher une seule fois le titre de l'article en question...
Je proposerai une modification de la fonction lastComList prochainement.
Voici le code que je propose pour la fonction lastComList(), et qui fonctionne très bien :
/**
* 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, #com_art_title)
* @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')) {
# Tableau d'association ArtId => ArtTitle (utile si #com_art_title est demandé)
$OArtIdTitle = array();
# 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.$v);
$artInfo = $this->plxMotor->artInfoFromFilename($this->plxMotor->plxGlob_arts->aFiles[$com]);
if($artInfo<=$datetime) { # on ne prends que les commentaires pour les articles publiés
if(empty($cat_ids) OR preg_match('/('.$cat_ids.')/', $artInfo)) {
$url = '?article'.intval($com).'/'.$artInfo.'#c'.$com;
$date = $com;
$content = strip_tags($com);
# On modifie nos motifs
$row = str_replace('L_SAID', L_SAID, $format);
$row = str_replace('#com_id',$com,$row);
$row = str_replace('#com_url',$this->plxMotor->urlRewrite($url),$row);
$row = str_replace('#com_author',$com,$row);
# Si #com_art_title est demandé
if(strpos($format, '#com_art_title')!=FALSE) {
$artId = $artInfo;
$artTitle;
# Si le titre de l'article est déjà présent dans $OArtIdTitle, on le récupère
if(isset($OArtIdTitle[$artId])) {
$artTitle = $OArtIdTitle[$artId];
} else { # Sinon, on va chercher le titre de l'article, puis on le stocke dans $OArtIdTitle
$a = $this->plxMotor->plxGlob_arts->query('/^'.$artId.'.(.*).xml$/');
$art = $this->plxMotor->parseArticle(PLX_ROOT.$this->plxMotor->aConf.$a);
$artTitle = $art;
$OArtIdTitle[$artId]=$artTitle;
}
$row = str_replace('#com_art_title',$artTitle,$row);
}
while(preg_match('/#com_content\(([0-9]+)\)/',$row,$capture)) {
if($com == '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);
# On genère notre ligne
echo $row;
$count++;
}
}
}
if($count>$max) break;
}
}
}
Voici la fonction. Je te laisse écrire le reste du plugin.
Je pense vraiment que cette modification devrait être présente dans PluXml lui-même :
- ça ne change rien pour ceux qui n'utilisent pas le format #com_art_title
- ça apporte une nouvelle option assez souvent utilisée pour présenter les derniers commentaires
Mais si les administrateurs de PluXml ne veulent pas de cette modification, j'en ferais effectivement un Plugin.
J'espère avoir fait ce qu'il faut, car c'est la première fois que j'utilise Github...
Est-ce que quelqu'un sait combien de temps il faut attendre avant de savoir si une modification sur Github est validée ou refusée ?
Car c'est assez frustrant de ne pas savoir ce qu'il va advenir de ma proposition de modif.
Merci.
Il faut juste être un peu patient... :P