aide sur plugin
Bonjour, je tente de créer un plugin mais comme je suis une bille la dessus, je n'arrive à rien.
l'idée est de mettre dans un plugin une fonction que je mettais avant dans le plxShow. Aussi, j'ai surchargé l'édition d'un article avec un champ supplémentaire dans lequel je glisse une url d'image.
j'ai donc besoin d'aller chercher l'info dans le xml de l'article appelé mais je bloque à ce moment la.
Si vous pouviez me dépatouiller avec le code ci-dessous j'apprécierais beaucoup car je tourne en rond. Merci par avance
l'idée est de mettre dans un plugin une fonction que je mettais avant dans le plxShow. Aussi, j'ai surchargé l'édition d'un article avec un champ supplémentaire dans lequel je glisse une url d'image.
j'ai donc besoin d'aller chercher l'info dans le xml de l'article appelé mais je bloque à ce moment la.
Si vous pouviez me dépatouiller avec le code ci-dessous j'apprécierais beaucoup car je tourne en rond. Merci par avance
<?php
class plxEtendreClass extends plxPlugin {
public function __construct($default_lang) {
# appel du constructeur de la classe plxPlugin (obligatoire)
parent::__construct($default_lang);
# déclaration du hook
$this->addHook('artImagePresse', 'artImagePresse');
}
/**
* Méthode qui affiche l'image presse dans l'article
**/
public function artImagePresse() {
$imgpresse = $this->plxMotor->plxRecord_arts->f('imagepresse');
if (!empty($imgpresse)){
echo '<div class="art-chapo imgpresse">'.$imgpresse.'</div>';
}
}
}
?>
0
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Par contre, ça fait longtemps que j'ai laissé mon code en attente et j'ai plus beaucoup de temps. Je peux rejeter un oeil dessus que ce week end (ou peut être avant mais c'est pas sûr...)
Ca coince à quel niveau chez toi ?
L'étape de sauvegarde, c'est bon ? Tu as bien ton fichier .xml de l'article qui contient ton champs ? Le champs à saisir lors de la rédaction ?
la sauvegarde c'est bon, la restitution dans le back et sur le front (avec la fonction dans le plxshow) c'est bon, mon .xml de l'article contient bien l'info, en fait, ce qui bloque c'est la restitution sur le front mais avec la fonction dans un plugin.
regarde qd tu pourras. Merci par avance.
P.S : j'ai installé ton adaptation de SIMPLO et c'est une tuerie. merci pour ce boulot.
pour tester
- créer un dossier plxNewArticleField dans le répertoire "plugins"
- ajouter dans ce dossier un fichier infos.xml
- créer un fichier plxNewArticleField.php dans el dossier plugins avec dedans le code ci-dessous
Servir frais.
<?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('AdminArticlePostData', 'AdminArticlePostData'); $this->addHook('AdminArticleParseData', 'AdminArticleParseData'); $this->addHook('AdminArticleInitData', 'AdminArticleInitData'); $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 '<fieldset>'; echo '<p><label for="id_myfield">Mon nouveau champ :</label></p>'; plxUtils::printInput('myfield',plxUtils::strCheck(\$myfield),'text','66-255'); echo '</fieldset'; ?> END; echo $string; } # Méthode qui écrit la valeur du 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 récupère la valeur du nouveau champ dans le fichier xml de l'article public function plxMotorParseArticle() { echo "<?php \$myfield = plxUtils::getValue(\$iTags['myfield'][0]); \$art['myfield'] = plxUtils::getValue(\$values[\$myfield]['value']); ?>"; } # Méthode qui initialise la valeur du nouveau champ à partir du champ du formulaire public function AdminArticlePostData() { echo '<?php $myfield = $_POST["myfield"]; ?>'; } # Méthode qui récupère la valeur du nouveau champ à partir de l'article public function AdminArticleParseData() { echo '<?php $myfield = trim($result["myfield"]); ?>'; } # Méthode qui initialise la valeur du nouveau champ (nouvel article) public function AdminArticleInitData() { echo '<?php $myfield = ""; ?>'; } /* * Méthode à appeler à partir du theme pour affichier la valeur du champ de l'article en cours * <?php $plxShow->callHook('plxShowArtNewField') ?> */ public function plxShowArtNewField() { echo "<?php echo plxUtils::strCheck(\$this->plxMotor->plxRecord_arts->f('myfield')) ?>"; } } ?>edit: j'ai volontairement utilisé 3 syntaxes différentes qui permettent d'obtenir le même résultat<<<END .... END;
echo "<?php \$var ?>";
echo '<?php $var ?>';
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
PS : et merci SapinTremblant pour ton avis sur Simplo
d'ailleurs Stéphane, comment puis-je solutionner mon 2eme problème. Dans ce plugin je voudrais une condition sur un nouveau champs. Si le champs est vide alors je n'affiche rien en Front. et aussi, comment passer des paramètres à cette fonction pour les "régler" dans mes Templates:
public function plxShowDOCPresse($picto, $phrase) { $documentpresse = $this->plxMotor->plxRecord_arts->f('myfield2'); if (!empty($documentpresse)){ echo '<div class="art-chapo '.$picto.'"><a class="picto telecharger encadre" href="'."<?php echo \$this->plxMotor->plxRecord_arts->f('myfield2') ?>".'">'.$phrase.'</a></div>'; } }P.S. : aussi, dans ton code les infos du .xml de l'article ne remontent pas dans article.php en BO. Elles s'enregistrent bien mais ne s'affiche pas.http://telechargements.pluxml.org/docs/PluXml_-_Plugins_Guide_du_developpeur_5.1.5.zip
C'est expliqué dedans: il y a 2 nouveaux chapitres qui expliquent comment passer des paramètres à la fonction callHook et comment récuperer une valeur de retour.
Allez je suis bon prince, je te fais un résumer
tu as donc ta fonction
public function plxShowDOCPresse($picto, $phrase) { $documentpresse = $this->plxMotor->plxRecord_arts->f('myfield2'); if (!empty($documentpresse)){ echo '<div class="art-chapo '.$picto.'"><a class="picto telecharger encadre" href="'."<?php echo \$this->plxMotor->plxRecord_arts->f('myfield2') ?>".'">'.$phrase.'</a></div>'; } }dans ton theme tu peux donc appeler ta fonction de cette façonsi tu as besoin d'un seul parametre:
<?php $plxShow->callHook('plxShowDOCPresse', 'param1') ?>ou si 2 ou plusieurs paramètres:<?php $plxShow->callHook('plxShowDOCPresse', array('param1', 'param2')) ?>quand tu dois appeler ta fonction avec + de un paramètres, il faut les placer sous forme de tableauConsultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
voila ce que j'ai :
<?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('plxShowDOCPresse', 'DOCPresse'); } public function DOCPresse($params) { echo $params[0]; echo $params[1]; $plxMotor = plxMotor::getInstance(); $plxShow = plxShow::getInstance(); $documentpresse = $plxMotor->plxRecord_arts->f('myfield2'); if (!empty($documentpresse)){ echo '<div class="art-chapo '.$params[0].'"><a class="picto telecharger encadre" href="'."<?php echo \$this->plxMotor->plxRecord_arts->f('myfield2') ?>".'">'.$params[1].'</a></div>'; } } ?>puis dans mon template :<?php $plxShow->callHook('plxShowDOCPresse', array('docpress','download')); ?>et cela n'affiche pas les paramètres passés, le reste oui mais les paramètres.Si quelqu'un veut bien m'aider, je tourne en rond.
echo '<div class="art-chapo '.$params[0].'"><a class="picto telecharger encadre" href="'."<?php echo \$this->plxMotor->plxRecord_arts->f('myfield2') ?>".'">'.$params[1].'</a></div>';tu devrais écrire ainsi :$string =<<<END <?php echo '<div class="art-chapo '.$params[0].'">'; echo ' <a class="picto telecharger encadre" href="'.\$this->plxMotor->plxRecord_arts->f('myfield2').'">'.$params[1].'</a></div>'; ?> END; echo $string;Ayant écris ce code dans le formulaire de réponse du forum sans coloration syntaxique il se peut que j'ai fait des erreurs de guillemets. A vérifier mais l'idée est là.Wham
PS : Vérifie dans le log php s'il n'y a pas d'erreur de syntaxe.