plugin article(s) liés
paysan hardi
Member
dans Entraide
Bonjour,
je tente depuis ce matin d'obtenir plugin avec un select multiple qui me permettrai de lier des articles entre eux.
l'affichage pourrai à terme se faire à la façon du plugin suggestion que je viens de découvrir...sauf que je n'en suis pas encore là
dans l'ordre :
- function AdminArticleTop() ne me prend pas la valeur par défaut ?
- plxAdminEditArticleXml() n'écrit pas la valeur de $ArticleLinks...alors qu'avec un champ texte ça passe...
bref ça sent le problème de récupération de variable pour champ multiple...mais je patauge
si en passant qq'un peut m'aiguiller sur un chemin pas trop caillouteux, je le remercie par avance
je tente depuis ce matin d'obtenir plugin avec un select multiple qui me permettrai de lier des articles entre eux.
l'affichage pourrai à terme se faire à la façon du plugin suggestion que je viens de découvrir...sauf que je n'en suis pas encore là
dans l'ordre :
- function AdminArticleTop() ne me prend pas la valeur par défaut ?
- plxAdminEditArticleXml() n'écrit pas la valeur de $ArticleLinks...alors qu'avec un champ texte ça passe...
bref ça sent le problème de récupération de variable pour champ multiple...mais je patauge
si en passant qq'un peut m'aiguiller sur un chemin pas trop caillouteux, je le remercie par avance
[== PHP ==]
class ArticleLinks extends plxPlugin {
public function __construct($default_lang) {
parent::__construct($default_lang);
$this->setConfigProfil(PROFIL_ADMIN);
$this->addHook('AdminArticleContent', 'AdminArticleContent');
$this->addHook('AdminArticleTop', 'AdminArticleTop');
$this->addHook('plxAdminEditArticleXml', 'plxAdminEditArticleXml');
$this->addHook('plxMotorParseArticle', 'plxMotorParseArticle');
$this->addHook('AdminTopEndHead', 'AdminTopEndHead');
$this->addHook('ArticleLinks', 'ArticleLinks');
}
public function AdminTopEndHead() {
echo "\t".'<link rel="stylesheet" type="text/css" href="'.PLX_PLUGINS.'ArticleLinks/style.css" />'."\n";
}
public function AdminArticleTop() { // charge les champs Admin
$string = "
\$ArticleLinks= (!empty(\$_POST)) ? \$_POST['ArticleLinks'] : '2_4';
if (is_array(\$ArticleLinks))
{ foreach(\$ArticleLinks as \$cle => \$valeur)
{ if (\$cle==0) {\$ArticleLinks = \$valeur;}
else {\$ArticleLinks .= '_'.\$valeur;}
}
}
";
echo "<?php ".$string." ?>";
}
public function AdminArticleContent() // affichage dans admin/nouvel article
{ # obtenir contenu du champ ArticleLinks
//$ArticleLinks="2_4";
# exploser en array si plusieurs choix
if( strpos($ArticleLinks, '_') !== false) {$a_ArticleLinks = explode('_', $ArticleLinks);}
else { $a_ArticleLinks[0] = $ArticleLinks; }
# requete pour avoir la liste des articles disponibles (en attendant)
$articles_dispos = array(1=>"article 1", 2=>"article 2", 3=>"article 3", 4=>"article 4", 5=>"article 5");
echo '<div id="ArticleLinks" >article(s) lié(s) :';
echo '<select multiple name="ArticleLinks[]" size="6">';
foreach ($articles_dispos as $id_art=>$titre_art)
{ //$id_art= row['id_art'];
$selected = (in_array($id_art,$a_ArticleLinks)) ? 'selected="selected"' : '';
echo '<option value="'.$id_art.'" '.$selected.' title="$id='.$id_art.'">'.$titre_art.'</option>';
}
echo'</select>';
echo "</div>";
}
public function plxAdminEditArticleXml() { // écriture dans article.xml
echo "<?php
\$xml .= \"\t\".'<ArticleLinks><![CDATA['.plxUtils::cdataCheck(trim(\$content['ArticleLinks'])).']]></ArticleLinks>'.\"\n\";
?>";
}
public function plxMotorParseArticle() {
echo "<?php if(isset(\$iTags['ArticleLinks'][0])){ \$art['ArticleLinks'] = trim(\$values[ \$iTags['ArticleLinks'][0] ]['value']);} ?>";
}
public function ArticleLinks() { // appel par callHook('ArticleLinks')
$plxMotor_inst = plxMotor::getInstance(); // permet de récupérer les champs de l'article
if($plxMotor_inst->plxRecord_arts->f('ArticleLinks')) {
$return = $plxMotor_inst->plxRecord_arts->f('ArticleLinks');
return $return;
}
return false;
}
}
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Dans la méthode plxAdminEditArticleXml, tu ne peux pas faire car la variable $content est un tableau. Tu ne peux pas la traiter comme une chaine de caractère.
Essaye en faisant à l'enregistrement et à la lecture utilise explode pour convertir la chaine en tableau
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
grâce à toi j'enregistre désormais ma variable dans le xml et je la récupère dans AdminArticleTop() en fin de traitement avec dans AdminArticleContent() j'ai maintenant : j'ai bien $a_ArticleLinks = Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 )...mais impossible de passer ce tableau en $selected alors que le select se remplit bien avec $articles_dispos ??????
j'ai essayé de tout passer en echo'<?php [foreach...] ?>'; (particularité pluxml ) ...mais sans succès
une dernière idée ?
http://www.php.net/manual/fr/function.array-search.php
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
pour un tableau donné : $a_ArticleLinks=Array ( 0=>1, 1=>2, 2=>5 );
array_search ne me prend pas le rang 0, seuls 2 et 5 sont selected ?
in_array m'affiche les bons 1,2 et 5
mon souci serait surtout de ne pas avoir à donner les valeurs, puisque le tableau arrive dans AdminArticleContent(), s'affiche avec ..sauf que dans le foreach ma variable est vide ????
c'est cette redondance que j'ai du mal à appréhender, cette syntaxe echo'<?php echo"";?>'; qui me fout la pagaille mais qui doit avoir ses raisons.