Submitted by monstres on
bonjour,
je suis entrain de d'implémenter un formulaire sur certain type de contenu lors de l'édition.
j'ai donc fait ceci pour mon formulaire 'pataglou";
J'ai besoin de plusieurs FieldSet pour grouper les informations.
<?php
$form['pataglou'] = array(
'#type' => 'fieldset',
'#title' => t('Personnaliser cet objet'),
);
$form['pataglou']['e_h'] = array(
'#type' => 'fieldset',
'#title' => t('Le Heros'),
'#collapsible'=>true,
);
$form['pataglou']['e_h']['t_peau'] = array(
'#type' => 'select',
'#title' => t('type de peau de l\'enfant'),
'#options' =>$t_peau,
'#multiple' => true,
);
?>
Une fois ce morceau de code activé j'ai bien un fieldset contenant un fieldset contenant ma selectList avec mes valeurs de base contenues dans la variable $t_peau.
Maintenant, lorsque je sauve cet article puis que je le réédite je souhaite que les valeurs précédemment sélectionnées dans la selectList le soient par défault lors de la réédition.
Je ne trouve pas la syntaxe appropriée pour récupérer ces valeurs.
Auriez vous des conseils ?
Quelqu'un peut-il m'expliquer ou les informations sont enregistrées dans drupal ?
Merci d'avance et bonne journée.
Tu as essayé avec
Permalien Soumis par loic.etibe le 18 Novembre, 2010 - 14:54
Tu as essayé avec '#default_value' => variable_get('variable', 'valeur par défaut'), ?
Oui j’ai bien tenté. Deux
Permalien Soumis par monstres le 18 Novembre, 2010 - 15:00
Oui j'ai bien tenté.
Deux manières même :
Mais ça ne renvoie rien.
Je débute tout juste en
Permalien Soumis par loic.etibe le 18 Novembre, 2010 - 15:03
Je débute tout juste en Drupal, mais tu ne devrais pas directement attaquer la variable t_peau ?
Je ne pense pas. La variable
Permalien Soumis par monstres le 18 Novembre, 2010 - 15:13
Je ne pense pas.
La variable t_peau contient un array destiné à l'affichage de ma selectList.
Je cherche à récupérer les valeurs de cette liste sélectionnées dans mon noeud.
Exemple :
t_peau contient "un","deux" et "trois"
A l'affichage ma selectList contiendra donc 3 entrées "un", "deux" et "trois".
Je sélectionne "deux" et "trois" dans ma liste et j'enregistre.
Lorsque je vais rééditer mon article il faut donc que "deux" et "trois" soit sélectionnées par défaut.
Ce sont ces données que je cherche à récupérer.
Désolé, je suis passé à côté
Permalien Soumis par monstres le 18 Novembre, 2010 - 15:27
Désolé, je suis passé à côté de ta réposne…
En effet il vaudrait mieux s'attaquer à
Mais ça n'affiche rien non plus. J'ai tenté bien d'autres choses genre :
…
On dirait que je n’ai pas les
Permalien Soumis par loic.etibe le 18 Novembre, 2010 - 15:31
On dirait que je n'ai pas les compétences nécessaires pour t'aider.
Cela dit, y'a toujours la méthode "on y va à la tronçonneuse", qui se matérialiserait ici par un bon gros var_dump de $conf qui semble être la variable globale utilisée par variable_get(). On sait jamais ;-)
Merci de t’être penché sur
Permalien Soumis par monstres le 18 Novembre, 2010 - 15:37
Merci de t'être penché sur mon problème.
Salut, On comprend pas bien
Permalien Soumis par drupalfrance le 18 Novembre, 2010 - 17:40
Salut,
On comprend pas bien où tu les mets ces champs : sur un formulaire de noeud ou dans un formulaire d'admin ?
Seuls les champs ajoutés aux formulaires d'admin sont enregistrés automatiquement dans la table
variables
(en gros). Installe le module devel, active le bloc 'development' et clique sur le lien 'variable editor' dans ce bloc, ça te permettra de voir la liste de toutes les variables et leur valeur, et de voir si la tienne y est.Si tu as ajouté ces champs dans un formulaire de noeud, c'est ta responsabilité de créer une table et le SQL qui va bien pour les enregistrer (le
hook_nodeapi()
te permet de savoir quand le noeud est sauvegardé, et donc quand exécuter ton SQL).Ils sont placés dans un
Permalien Soumis par monstres le 18 Novembre, 2010 - 18:10
Ils sont placés dans un formulaire de noeud uniquement lors de la création ou l'édition.
Je viens d'installer Devel et ma variable n'est pas dedans.
Je vais donc faire appel à un enregistrement dans une table.
Je pensais que lors de la création d'un formulaire avec form_alter les variables étaient automatiquement enregistrées.
Comme dans cet exemple :
http://planete.drupalfr.org/node/1006
Merci pour ta réponse.
L’exemple auquel tu fais
Permalien Soumis par drupalfrance le 19 Novembre, 2010 - 08:39
L'exemple auquel tu fais référence parle "d'étendre le formulaire de configuration d'un type de contenu", autrement dit de rajouter des champs dans un formulaire d'admin. Dans ce cas, comme dit plus haut, les nouveaux champs sont enregistrés automatiquement.
Mais si on parle d'un formulaire de noeud (à l'adresse
node/add/XXX
), l'enregistrement des nouveaux champs ne se fait pas automatiquement.ok, super. J’ai
Permalien Soumis par monstres le 19 Novembre, 2010 - 09:58
ok, super. J'ai compris.
Merci et bonne journée.
arf, je bloque sur autre
Permalien Soumis par monstres le 19 Novembre, 2010 - 10:53
arf, je bloque sur autre chose maintenant…
si j'ai un champs de type checkboxes dans mon formulaire avec 3 possibilités:
un
deux
trois
comment stocker dans ma base de données un array des valeurs sélectionnées.
du genre array('deux','trois') :
a:2:{i:1;s:1:"deux";i:2;s:1:"trois";}}
et non un array conventionnel renvoyé par $form_state['values']['macheckboxes'] de type :
a:2:{i:1;s:1:"1";i:2;s:1:"2";}}
qui ne stock que les valeur 1 ou 0 des chekboxes cochées ?
Tu as plusieurs
Permalien Soumis par drupalfrance le 19 Novembre, 2010 - 12:40
Tu as plusieurs possibilités :
1) Soit tu enregistres le array au format sérialisé (
a:2:{i:1;s:1:»deux»;i:2;s:1:»trois»;}}
) et tu le désérialises au moment de le charger, histoire de le reconvertir en tableau PHP (cherche dans la doc PHP les commandes pour sérialiser / désérialiser).Dans ta table, tu n'auras donc qu'un seul enregistrement, quel que soit le nombre de valeurs dans l'
array :
NID | VALEURS
----------------------
18 | (a:2:{i:1;s:1:»deux»;i:2;s:1:»trois»;}})
2) Soit tu enregistres autant de lignes qu'il y a de valeurs dans ton array. Ta table ressemblerait alors à ça :
NID | VALEUR
----------------------
18 | deux
18 | trois
La deuxième solution est un peu plus compliquée à mettre en oeuvre, mais plus élégante.
PS. Sérialiser, ça veut dire convertir une variable en chaîne de caractère. Désérialiser, c'est le processus inverse.
ok, j’ai compris, moi je
Permalien Soumis par monstres le 19 Novembre, 2010 - 13:41
ok, j'ai compris, moi je sérialize et desialize dans une seule ligne en une seule ligne (la manière la moins élégante).
Toutefois la commande $form_state[‘values’][‘macheckboxes’] me fait cet array :
a:3:{i:0;i:0;i:1;i:1;i:2;i:0;}
Cet array ne contient que les valeurs 0 ou 1 (case cochée ou non) de mes 3 entrées et non directement les 'titres' des cases cochés…
Je stocke donc dans ma base cet array qui ne contient pas les 'titres' 'un' 'deux' et 'trois';