PluXml.org

Blog ou CMS à l'Xml

Vous n'êtes pas identifié(e).

#1 17/12/2017 16:53:51

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 196
Site Web

Parsing balise "description" de la classe class.plx.feed.php

Bonjour,

J'aimerais pouvoir parser via une fonction maison le contenu de la balise "description" des flux rss des articles (classe class.plx.feed.php).

[== Indéfini ==]
public function getRssArticles() {
...
# On va boucler sur les articles (s'il y en a)
		if($this->plxRecord_arts) {
			while($this->plxRecord_arts->loop()) {

				# On affiche le flux dans un buffer
				$entry .= "\t<item>\n";
				$entry .= "\t\t".'<title>'.plxUtils::strCheck($this->plxRecord_arts->f('title')).'</title> '."\n";
				$entry .= "\t\t".'<link>'.$this->urlRewrite('?article'.$artId.'/'.$this->plxRecord_arts->f('url')).'</link>'."\n";
				$entry .= "\t\t".'<guid>'.$this->urlRewrite('?article'.$artId.'/'.$this->plxRecord_arts->f('url')).'</guid>'."\n";
				$entry .= "\t\t".'<description>'.plxUtils::strCheck(plxUtils::rel2abs($this->racine,$content)).'</description>'."\n";
				$entry .= "\t\t".'<pubDate>'.plxDate::dateIso2rfc822($this->plxRecord_arts->f('date')).'</pubDate>'."\n";
				$entry .= "\t\t".'<dc:creator>'.plxUtils::strCheck($author).'</dc:creator>'."\n";
				# Hook plugins
				eval($this->plxPlugins->callHook('plxFeedRssArticlesXml'));
				$entry .= "\t</item>\n";
			}
		}

...

}

Comme on peux le voir pas très pratique via un hook.

Quelle est à votre avis la meilleure solution a adopter ?

Merci d'avance,

Cordialement,

jeje

Dernière modification par je-evrard (18/12/2017 09:33:08)


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Visual Wizard - facebook vw

Hors ligne

#2 18/12/2017 21:18:58

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 196
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Hum pas si facile... je cogite de mon côté.


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Visual Wizard - facebook vw

Hors ligne

#3 18/12/2017 22:39:03

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 248
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Salut Jérôme

Que veux-tu faire exactement ?
Rajouter du contenu à toi dans la balise description du flux rss ?


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#4 19/12/2017 09:34:16

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 196
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Salut stef,

Je m'explique:

Que se soit spxshortcodes ou visualwizard je créé un hook de sortie IndexEnd qui permet d'interpréter les shortcodes (extrèmement puissant)

[== Indéfini ==]
# parse shorcode in output
	public function IndexEnd() {
		$string = '
			$output = do_shortcode($output);
		';
		echo '<?php '.$string.' ?>';
	}

Par ce biais les shortocodes sont interprétés en sortie html via la classe shortcodes.php loadée par mes soins dans "indexBegin"

Le problème c'est que le flux rss n'interprète pas les shortcodes, il faut donc pouvoir faire l'équivalent de ce parsing :

Avant :

[== Indéfini ==]
...
if($this->aConf['feed_chapo']) {
	$content = $this->plxRecord_arts->f('chapo');
	if(trim($content)=='') $content = $this->plxRecord_arts->f('content');
} else {
	$content = $this->plxRecord_arts->f('chapo').$this->plxRecord_arts->f('content');
}

...

Après si on devait le faire directement dans le code ça donnerait ceci :

[== Indéfini ==]
... ligne 238
if($this->aConf['feed_chapo']) {
	$content = $this->plxRecord_arts->f('chapo');
	if(trim($content)=='') $content = $this->plxRecord_arts->f('content');
} else {
	$content = $this->plxRecord_arts->f('chapo').$this->plxRecord_arts->f('content');
}
$content = do_shortcode($content);
...

Voila pour l'explication. Mais comment le faire simplement via un hook d'un plugin ? le seul hook a dispo est plxFeedRssArticlesXml qui permet de rajouter des champs.

Cordialement,

jéjé

Dernière modification par je-evrard (19/12/2017 09:54:49)


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Visual Wizard - facebook vw

Hors ligne

#5 19/12/2017 10:41:50

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 1 006
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Pour faire cela le hook plxFeedRssArticlesXml est mal placé.

Il faudrait qu'il agisse avant d'alimenter la variable $entry et on devrait prendre en compte sa valeur de retour (true | false) pour savoir si on continue le traitement à l'intérieur de la boucle ou si on passe à l'article suivant.
Je suis perplexe sur l'intérêt de cette variable $entry qui ne subit aucun traitement à la sortie de la boucle.

Pour résoudre ton problème, il faut utiliser le hook FeedEnd et traiter la variable $output en considérant que c'est le contenu d'un fichier XML.
Le hic c'est que cela concerne un lot d'articles.

Le problème se pose également pour les commentaires.

Hors ligne

#6 19/12/2017 10:55:23

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 196
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Tout à fait.

Dernière modification par je-evrard (19/12/2017 10:56:10)


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Visual Wizard - facebook vw

Hors ligne

#7 19/12/2017 14:42:45

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 248
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Tu peux toujours t'en sortir avec ce genre code

<?php

class test extends plxPlugin {


	public function __construct($default_lang) {

		# Appel du constructeur de la classe plxPlugin (obligatoire)
		parent::__construct($default_lang);

		# Ajouts des hooks
		$this->addHook('plxFeedRssArticlesXml', 'plxFeedRssArticlesXml');
	}

 	public function plxFeedRssArticlesXml() {

		echo '<?php
			if(preg_match("/<description>(.*?)<\/description>/", $entry, $capture)) {
				print_r($capture);
			}
		?>';
	
	}

}
?>

Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#8 19/12/2017 15:51:41

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 1 006
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Si c'est pour un site particulier :
* dupliquer le fichier core/lib/class.plx.feed.php dans un sous-dossier du theme, en ajoutant un fichier .htaccess avec les régles Deny from all et Options -Indexes
* placer le hook qui va bien au bon endroit dans la copie
* corriger le chemin pour accèder à la class dans le fichier feed.php dans le thème

C'est la solution la plus souple.

P.S. : Cela serait bien d'avoir un fichier .htaccess dans le dossier core/lib avec une règle Deny from all. Le souci est qu'il y a dans ce dossier des fichiers statiques type js qui seraient mieux placés dans un dossier core/assets  sad

Hors ligne

#9 19/12/2017 16:45:28

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 196
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Merci pour vos réponses... Je vais voir ça.


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Visual Wizard - facebook vw

Hors ligne

#10 20/12/2017 09:44:34

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 196
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Bonjour,

Voila ma solution :

[== Indéfini ==]
public function FeedEnd() {
		
		echo '<?php
		
			$outputxml = simplexml_load_string($output);
			foreach ($outputxml->channel->item as $item) {
				$item->description = do_shortcode($item->description);
			}
			$output = $outputxml->asXML();
		?>';
		
	}

++

jéjé


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Visual Wizard - facebook vw

Hors ligne

#11 20/12/2017 12:04:54

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 1 006
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Excellent !

SimpleXML est un outil puissant et relativement simple d'emploi ( quoique XPath ? ).

Dommage qu'on en soit encore à xml_parser dans PluXml. http://forum.pluxml.org/viewtopic.php?id=4487

Hors ligne

#12 20/12/2017 12:06:22

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 196
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Oui cela serait 100 fois plus simple. Ou même passer de xml a json mais c'est une autre histoire.

++


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Visual Wizard - facebook vw

Hors ligne

#13 20/12/2017 14:11:48

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 1 006
Site Web

Re : Parsing balise "description" de la classe class.plx.feed.php

Bon alors, ce n'est pas la peine de parler de YAML  devil

Dernière modification par bazooka07 (20/12/2017 14:12:42)

Hors ligne

Pied de page des forums

A propos Nous soutenir Contact Twitter Google+
Copyright © 2006-2018 PluXml.org, tous droits réservés