[SPIP Zone] création d'un tableau de données avec Plugin CFG

Bonjour,
Je re-poste le message ci-dessous à spip-zone, car il semble plus
indiqué sur cette liste.
Merci de votre indulgence.

J'essaie d'utiliser CFG pour modifier et paramétrer un plugin.
J'aimerais pouvoir, à l'aide de cases à cocher récuperer une liste de
rubriques et les affecter à une variable.
J'ai donc une boucle:
   <BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}>
<label><:archive:choix_rubrique:> #ID_RUBRIQUE: #TITRE</label>
<input type="checkbox" name="id_rubrique" value="#ID_RUBRIQUE"
id="#ID_RUBRIQUE"/><br />

     <BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
<input type="checkbox" name="id_rubrique" value="#ID_RUBRIQUE"
id="#ID_RUBRIQUE"/><br />

  <BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
     </BOUCLE_rubriques>
   </BOUCLE_secteurs>

Le plugin n'enregiste qu'une seule valeur. Il semble que dans les
options on peut utiliser une option appelée casier, mais je ne suis
pas arrivé à la mettre en place.
Si je met avant ma boucle:
<!-- casier=rubriques -->
il me dit qu'il enregistre les modifications dans archive/rubriques,
mais je n'ai pas vu de valeurs dans la table spip_meta
Quelqu'un pourrait m'expliquer.
Merci pour votre aide

Jeannot a écrit :

Bonjour,
Je re-poste le message ci-dessous à spip-zone, car il semble plus
indiqué sur cette liste.
Merci de votre indulgence.

J'essaie d'utiliser CFG pour modifier et paramétrer un plugin.
J'aimerais pouvoir, à l'aide de cases à cocher récuperer une liste de
rubriques et les affecter à une variable.
J'ai donc une boucle:
   <BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}>
<label><:archive:choix_rubrique:> #ID_RUBRIQUE: #TITRE</label>
<input type="checkbox" name="id_rubrique" value="#ID_RUBRIQUE"
id="#ID_RUBRIQUE"/><br />

     <BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
<input type="checkbox" name="id_rubrique" value="#ID_RUBRIQUE"
id="#ID_RUBRIQUE"/><br />

  <BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
     </BOUCLE_rubriques>
   </BOUCLE_secteurs>

Le plugin n'enregiste qu'une seule valeur. Il semble que dans les
options on peut utiliser une option appelée casier,

casier, c'est pour autre chose.

Ici, je pense qu'il te faut simplement mettre name="id_rubrique" dans est input pour lui dire que c'est un tableau

Après, dans le CFG, tu peux tester le champ avec :
[(#ID_RUBRIQUE|in_array{#CONFIG{mon_plugin/id_rubrique,'',''}}|?{' checked="checked"'})]

afin de faire afficher les rubriques que tu as cochées.

MM.

e.

Ici, je pense qu'il te faut simplement mettre name="id_rubrique" dans
est input pour lui dire que c'est un tableau

Merci,
Je viens de faire le test et spip me répond:

Warning: rawurlencode() expects parameter 1 to be string, array given
in C:\www2\archivage\ecrire\inc\utils.php on line 329

J'ai essayé également avec des parenthèses sans succès

Jeannot a écrit :

e.

Ici, je pense qu'il te faut simplement mettre name="id_rubrique" dans
est input pour lui dire que c'est un tableau

Merci,
Je viens de faire le test et spip me répond:

Warning: rawurlencode() expects parameter 1 to be string, array given
in C:\www2\archivage\ecrire\inc\utils.php on line 329

J'ai essayé également avec des parenthèses sans succès

Qu'as tu mis ? donne le bout de code de ton fond cfg vers où l'erreur apparait.

regarde aussi fonds/cfg_testsimple qui utilise sur un select multi une variable en tableau

MM.

La boucle est la même, sauf que j'ai rajouté les crochets comme tu l'a suggéré:

    <BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}>
<label><:archive:choix_rubrique:> #ID_RUBRIQUE: #TITRE</label>
<input type="checkbox" name="id_rubrique" value="#ID_RUBRIQUE"
id="#ID_RUBRIQUE"
[(#ID_RUBRIQUE|in_array{#CONFIG{mon_plugin/id_rubrique,'',''}}|?{'
checked="checked"'})]/><br />

      <BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
<input type="checkbox" name="id_rubrique" value="#ID_RUBRIQUE"
id="#ID_RUBRIQUE"
[(#ID_RUBRIQUE|in_array{#CONFIG{mon_plugin/id_rubrique,'',''}}|?{'
checked="checked"'})]/><br />

   <BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
      </BOUCLE_rubriques>
    </BOUCLE_secteurs>

Le formulaire s'affiche correctement, mais lorsque je sélectionne une
case j'ai le message que j'ai indiqué, et répété plusieurs fois.
J'ai comparé avec le fichier exemple et c'est bien qui est utilisé...

2008/2/9, Matthieu Marcillaud <marcimat@free.fr>:

Jeannot a écrit :
> e.
>> Ici, je pense qu'il te faut simplement mettre name="id_rubrique" dans
>> est input pour lui dire que c'est un tableau
>>
> Merci,
> Je viens de faire le test et spip me répond:
>
> Warning: rawurlencode() expects parameter 1 to be string, array given
> in C:\www2\archivage\ecrire\inc\utils.php on line 329
>
> J'ai essayé également avec des parenthèses sans succès
Qu'as tu mis ? donne le bout de code de ton fond cfg vers où l'erreur
apparait.

regarde aussi fonds/cfg_testsimple qui utilise sur un select multi une
variable en tableau

MM.

Jeannot a écrit :

La boucle est la même, sauf que j'ai rajouté les crochets comme tu l'a suggéré:

    <BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}>
<label><:archive:choix_rubrique:> #ID_RUBRIQUE: #TITRE</label>
<input type="checkbox" name="id_rubrique" value="#ID_RUBRIQUE"
id="#ID_RUBRIQUE"
[(#ID_RUBRIQUE|in_array{#CONFIG{mon_plugin/id_rubrique,'',''}}|?{'
checked="checked"'})]/><br />

#CONFIG{mon_plugin/id_rubrique}

Heu, là tout de même, tu pourrais faire un petit effort... changer 'mon_plugin' par le tien (le nom de ton fond cfg ou du parametre <!-- nom=XX -->), certainement 'archive' !!!

MM.

Heu, là tout de même, tu pourrais faire un petit effort... changer
'mon_plugin' par le tien (le nom de ton fond cfg ou du parametre <!--
nom=XX -->), certainement 'archive' !!!

MM.

Désolé, j'avais corrigé, mais le problème n'est pas là, car en
l'absence de ce bout de code (je parle du test "checked", le problème
est identique. J'avais juste rajouté les , dans name="id_rubrique"

Jeannot a écrit :

Heu, là tout de même, tu pourrais faire un petit effort... changer
'mon_plugin' par le tien (le nom de ton fond cfg ou du parametre <!--
nom=XX -->), certainement 'archive' !!!

MM.

Désolé, j'avais corrigé, mais le problème n'est pas là, car en
l'absence de ce bout de code (je parle du test "checked", le problème
est identique. J'avais juste rajouté les , dans name="id_rubrique"

Bon j'ai en partie trouvé l'erreur...
C'est assez cocasse :frowning:

En fait, dans les fonds CFG, les formulaires utilisent une balise action="#SELF" ... Et SPIP ajoute automatiquement dans l'url tout ce qui commence par "id_" et qui a été déjà envoyé par POST. et lorsque l'on appelle la fonctions _request($chose), c'est la valeut de GET qui est prise en premier si elle existe, puis celle de POST... là, GET existait déjà... et paf.

Par ailleurs, le "bug" sur rowurlencode ne se manifeste qu'en 1.9.2, sur la version 1.9.3dev c'est corrigé.

La solution que tu peux envisager :
changer "id_rubrique" par "idrubrique"

Voila ce que j'ai testé qui fonctionne (en 1.9.3 au moins pour sur)...

MM.

  <!-- titre=<:multiflex:configuration_multiflex:> -->
<!-- nom=multiflex -->
<!-- casier=general -->
#CACHE{0}
#CFG_ARBO{multiflex}
<form method="post" action="#SELF">
<div>
<div>[(#ENV{_cfg_}|form_hidden)]</div>

<BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}>
    <input type="checkbox" name="idrubis" value="#ID_RUBRIQUE" id="#ID_RUBRIQUE"
      [(#ID_RUBRIQUE
        |in_array{[(#CONFIG{multiflex/general/idrubis,'',''})]}
        |?{'checked="checked"'})]/>
  <label>#ID_RUBRIQUE: #TITRE</label>
  <br />

     <BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
    <input type="checkbox" name="idrubis" value="#ID_RUBRIQUE" id="#ID_RUBRIQUE"
      [(#ID_RUBRIQUE
        |in_array{[(#CONFIG{multiflex/general/idrubis,'',''})]}
        |?{'checked="checked"'})]/>
    <label>#ID_RUBRIQUE: #TITRE</label>
      <br />

    <BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
  </BOUCLE_rubriques>
</BOUCLE_secteurs>

<br />

<div>
<input type="submit" name="_cfg_ok" value="<:oK:>" class="fondo" />
<input type="reset" value="<:reset:>" class="fondo" />
<input type="submit" name="_cfg_delete" value="<:supprimer:>" class="fondo" />
</div>
</form>

Bien vu,
il s'agit bien du id_ qui posait problème.
Je l'ai remplacé et tout est rentré dans l'ordre.
Pour résumer, pour utiliser un tableau, il faut: name="nom", en
évitant d'utiliser id_
Le test "checked" que tu propose fonctionne.
Merci pour ton aide

Le 10/02/08, Matthieu Marcillaud<marcimat@free.fr> a écrit :

Jeannot a écrit :
>> Heu, là tout de même, tu pourrais faire un petit effort... changer
>> 'mon_plugin' par le tien (le nom de ton fond cfg ou du parametre <!--
>> nom=XX -->), certainement 'archive' !!!
>>
>> MM.
>>
>>
> Désolé, j'avais corrigé, mais le problème n'est pas là, car en
> l'absence de ce bout de code (je parle du test "checked", le problème
> est identique. J'avais juste rajouté les , dans name="id_rubrique"

Bon j'ai en partie trouvé l'erreur...
C'est assez cocasse :frowning:

En fait, dans les fonds CFG, les formulaires utilisent une balise
action="#SELF" ... Et SPIP ajoute automatiquement dans l'url tout ce qui
commence par "id_" et qui a été déjà envoyé par POST. et lorsque l'on
appelle la fonctions _request($chose), c'est la valeut de GET qui est
prise en premier si elle existe, puis celle de POST... là, GET existait
déjà... et paf.

Par ailleurs, le "bug" sur rowurlencode ne se manifeste qu'en 1.9.2, sur
la version 1.9.3dev c'est corrigé.

La solution que tu peux envisager :
changer "id_rubrique" par "idrubrique"

Voila ce que j'ai testé qui fonctionne (en 1.9.3 au moins pour sur)...

MM.

  <!-- titre=<:multiflex:configuration_multiflex:> -->
<!-- nom=multiflex -->
<!-- casier=general -->
#CACHE{0}
#CFG_ARBO{multiflex}
<form method="post" action="#SELF">
<div>
<div>[(#ENV{_cfg_}|form_hidden)]</div>

<BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}>
                <input type="checkbox" name="idrubis" value="#ID_RUBRIQUE"
id="#ID_RUBRIQUE"
                        [(#ID_RUBRIQUE
                                |in_array{[(#CONFIG{multiflex/general/idrubis,'',''})]}
                                |?{'checked="checked"'})]/>
        <label>#ID_RUBRIQUE: #TITRE</label>
        <br />

     <BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
                <input type="checkbox" name="idrubis" value="#ID_RUBRIQUE"
id="#ID_RUBRIQUE"
                        [(#ID_RUBRIQUE
                                |in_array{[(#CONFIG{multiflex/general/idrubis,'',''})]}
                                |?{'checked="checked"'})]/>
                <label>#ID_RUBRIQUE: #TITRE</label>
                        <br />

    <BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
  </BOUCLE_rubriques>
</BOUCLE_secteurs>

<br />

<div>
<input type="submit" name="_cfg_ok" value="<:oK:>" class="fondo" />
<input type="reset" value="<:reset:>" class="fondo" />
<input type="submit" name="_cfg_delete" value="<:supprimer:>"
class="fondo" />
</div>
</div>
</form>