récupération données dans xml

JeremmmJeremmm Member
mars 2011 modifié dans Modifications
Bonjour,

Voilà, j'essai d'ajouter une fonction pour récupérer un champ (minia) quand les fichiers xml article que j'alimente en créant un article.

Voici comment il est :

<?xml version="1.0" encoding="UTF-8" ?>
- <document>
- <title>
- <![CDATA[ Premier article ]]>
</title>
- <minia>
- <![CDATA[ test ]]>
</minia>
<allow_com>1</allow_com>
- <template>
- <![CDATA[ article.php ]]>
</template>
- <chapo>
- <![CDATA[ ]]>
</chapo>
- <content>
- <![CDATA[ <p>Ceci est un article créé lors de l'installation de PluXml. Editez-le depuis la zone d'administration.</p> ]]>
</content>
- <tags>
- <![CDATA[ PluXml ]]>
</tags>
</document>

J'ai créé une fonction dans le fichier class.plx.show.php pour pouvoir récupérer le champ :

public function artImage() {
echo $this->plxMotor->plxRecord_arts->f('minia');
}

Impossible d'afficher ce que se trouve dans le champ, par contre quand je met, par exemple content ou chapo, il s'affiche bien.

Auriez vous une idée de pourquoi il ne s'affiche pas?

Merci

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Jeremmm

    Je suis désolé je n'ai pas le temps de faire un tuto, mais voilà comment faire avec un plugin, tout facilement, proprement et sans modifier le core de pluxml (pour la version 5.1 beta 1)

    Attention ça va aller vite.... :)

    dans le dossier /plugins/ créer une dossier plxNewArticleField (repecte les majuscules)

    dans le dossier /plugins/plxNewArticleField créer un fichier infos.xml et colle dedans le code suivant:
    <?xml version="1.0" encoding="UTF-8"?>
    <document>
    	<title><![CDATA[Demo]]></title>
    	<author><![CDATA[Stéphane F.]]></author>
    	<version>1.0</version>
    	<date>17/03/2011</date>
    	<site>http://pluxml.org</site>
    	<description><![CDATA[Plugin de test pour ajouter un nouveau champs de saisie sur la page de redaction d'un article]]></description>
    	<requirements></requirements>
    </document>
    
    toujours dans ce dossier créer un fichier plxNewArticleField.php et coller dedans le code suivant:
    <?php
    
    class plxNewArticleField extends plxPlugin {
    
    	public function __construct($default_lang) {
    
    		# appel du constructeur de la classe plxPlugin (obligatoire)
    		parent::__construct($default_lang);
    
    		# Ajoute des hooks
    		$this->addHook('AdminArticleContent', 'AdminArticleContent');
    		$this->addHook('plxAdminEditArticleXml', 'plxAdminEditArticleXml');
    		$this->addHook('plxMotorParseArticle', 'plxMotorParseArticle');
    		$this->addHook('AdminArticleTop', 'AdminArticleTop');		
    		$this->addHook('plxShowArtNewField', 'plxShowArtNewField');	
    	
    	}
    
    	# Méthode qui ajoute le nouveau champ sur la page de rédaction d'un article
    	public function AdminArticleContent() {
    		$string = <<<END
    		<?php
    			echo '<p class="field"><label for="id_myfield">Mon nouveau champ :</label></p>';
    			plxUtils::printInput('myfield',plxUtils::strCheck(\$myfield),'text','66-255');
    		?>
    END;
    		echo $string;
    	}
    	
    	# Méthode qui écrit le nouveau champ dans le fichier xml de l'article
    	public function plxAdminEditArticleXml() {	
    		echo "<?php	\$xml .= \"\t\".'<myfield><![CDATA['.plxUtils::cdataCheck(trim(\$content['myfield'])).']]></myfield>'.\"\n\"; ?>";
    	}
    	
    	# Méthode qui lit le nouveau champ dans le fichier xml de l'article
    	public function plxMotorParseArticle() {	
    		echo "<?php	\$art['myfield'] = (isset(\$iTags['myfield']))?trim(\$values[ \$iTags['myfield'][0] ]['value']):''; ?>";
    	}	
    	
    	# Méthode qui récupere la valeur du champ à afficher dans le champ de saisie
    	public function AdminArticleTop() {	
    		
    		$string = <<<END
    		<?php
    		if(!empty(\$_POST)) {
    			\$myfield = \$_POST['myfield'];
    		} elseif(!empty(\$_GET['a'])) {
    			\$myfield = trim(\$result['myfield']);
    		} else {
    			\$myfield = '';
    		}
    		?>
    END;
    		echo $string;
    	
    	}	
    
    	# Méthode appelée à partir du theme pour afficher la valeur du champ de l'article en cours
    	public function plxShowArtNewField() {
    		echo "<?php echo plxUtils::strCheck(\$this->plxMotor->plxRecord_arts->f('myfield')) ?>";
    	}
    	
    }
    ?>
    
    Dans le fichier de ton thème : /themes/<ton theme>/article.php en dessous de la ligne
    <div class="post"><?php $plxShow->artContent(); ?></div>
    
    ajoute la ligne suivante :
    <p><?php $plxShow->callHook('plxShowArtNewField') ?></p>
    
    nb: cette ligne est à ajouter également dans les autres fichiers de ton theme partout où tu voudras voir afficher le nouveau champ.

    Il ne te reste plus qu'à aller dans l'administration, menu Parametres > Plugins et activer le plugin "Demo"

    Va sur la page de rédaction d'un article et en bas de page tu verras un nouveau champ de saisie intitulé "Mon nouveau champ :"

    Pour info: le champ dans le fichier xml des article s'appelle "myfield"

    Pour plus d'explications faudra dans un premier temps éplucher le code donné. Je répondrai aux questions bien entendu.
    Je conseille également de lire la doc sur les plugins dispo dans l'archive de la beta 5.1 dans le dossier /docs.
    Merci de la lire avant de poser des questions. Les réponses sont surement dedans.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Merci d'avoir répondu :)

    Je vais regarder ça de près.

    Merci
  • parfait, ça fonctionne très bien.
  • bon maintenant je vais regarder comment le modifier, car je veux affecter une image par article qui sera afficher dans le home.php.

    donc la modification sera je pense :
    bouton parcourir + redimensionnement de l'image en fonction des paramètres choisis.
  • bonjour

    comment fait on pour récupérer la valeur de myfield dans une page static ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    essaye ça, tu me diras si ça marche

    dans la page statique rajoute ce code
    <?php
    global $plxShow;
    $plxShow->callHook('plxShowArtNewField') ;
    ?>
    
    j'ai pas essayé donc peut etre que ça ne donnera rien

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • c ce que j ai fait
    mais comme il y a un echo dans la fonction
    et une balise de fin php '?>' mon php s'arrete
    donc ?
  • en enlevant le echo ca ne donne rien non plus
    j ai essayé avec un return mais la aussi je me suis planter
    faut dire que je ne suis pas très bon en php
  • nibunibu Member
    Bonjour,

    Je relance sous ce sujet pour savoir comment ajouter plusieurs champs (environ 10) :s . J'ai tenté de doubler le plugin mais ça ne fonctionne pas.

    Quelqu'un a-t-il une solution?

    Merci!
  • bonjour j'ai une petite question s'il vous plait j'ai un fichier xml et je veux recuperer la date de chaque pays voila le fichier xml
    Article xml:lang="FR" handle="Meteo" type="Local">
    <Location id="07157000" continent="EU" name_fr="Paris" altitude="108" latitude="49.02" longitude="2.53" type="Town">
    <Day val="20130712">
    <TempMor>11</TempMor>
    <TempAft>26</TempAft>
    <Txt_fr>bien ensoleillé</Txt_fr>
    <Symb>90</Symb>
    <Force>8</Force>
    <Dir>N</Dir>
    <Source>modell</Source>
    </Day>
    <Day val="20130713">
    <TempMor>15</TempMor>
    <TempAft>27</TempAft>
    <Txt_fr>bien ensoleillé</Txt_fr>
    <Symb>90</Symb>
    <Force>8</Force>
    <Dir>NE</Dir>
    <Source>modell</Source>
    </Day>
    <Day val="20130714">
    <TempMor>16</TempMor>
    <TempAft>28</TempAft>
    <Txt_fr>bien ensoleillé</Txt_fr>
    <Symb>90</Symb>
    <Force>6</Force>
    <Dir>N</Dir>
    <Source>modell</Source>
    </Day>
    </Location>
    <Location id="06590000" continent="EU" name_fr="Luxembourg" altitude="376" latitude="49.62" longitude="6.22" type="Town">
    <Day val="20130712">
    <TempMor>12</TempMor>
    <TempAft>23</TempAft>
    <Txt_fr>bien ensoleillé</Txt_fr>
    <Symb>90</Symb>
    <Force>4</Force>
    <Dir>W</Dir>
    <Source>modell</Source>
    </Day>
    <Day val="20130713">
    <TempMor>12</TempMor>
    <TempAft>23</TempAft>
    <Txt_fr>bien ensoleillé</Txt_fr>
    <Symb>90</Symb>
    <Force>6</Force>
    <Dir>N</Dir>
    <Source>modell</Source>
    </Day>
    <Day val="20130714">
    <TempMor>12</TempMor>
    <TempAft>24</TempAft>
    <Txt_fr>bien ensoleillé</Txt_fr>
    <Symb>90</Symb>
    <Force>4</Force>
    <Dir>NW</Dir>
    <Source>modell</Source>
    </Day>
    </Location>
    ......
    pour l instant j arrive a parser le fichier xml ça ma fiche:
    Day:
    TempMor:11
    TempAft:26
    Force:8
    Dir:N
    .....
    mais le probleme day ne s affiche pas et voila le code que j'ai mis
    <?php

    //Function to convert date format
    function ConvertDate($date)
    {
    $timezone = new DateTimeZone('UTC');
    $dateTime = DateTime::createFromFormat('Ymd', $date, $timezone);
    echo $dateTime->format('m/d');
    }


    $xml = simplexml_load_file('meteo.xml');
    $items = $xml->xpath('*/Day');
    $query =$xml->xpath('Location/Day'); // had les expression
    foreach($query as $q) {
    echo '<br>';
    echo $q->Day;
    }

    foreach($items as $item) {
    echo '<br>Day :'.$item->Day.'<br>TempMor :',$item->TempMor.'<br>TempAft :',$item->TempAft.'<br>Force :',$item->Force.'<br>Dir :',$item->Dir.'<br>----<br>' ;

    }
    ?>


    aidez moi s'il vous plait :(
Connectez-vous ou Inscrivez-vous pour répondre.