Message d'avertissement

The subscription service is currently unavailable. Please try again later.

checkbox cochée API Form

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Malgré avoir lu l'api sur les formulaires il y a un petit truc qui m'échappe, comment indiquer qu'une checkbox est cochée ou pas.

Si je prends par exemple le code suivant, comment dire par exemple je veux que l'option moderate soit cochée par défaut et pas les autres?

Je n'ai pas trouvé d'attribut checked...

<?php
$form
['node_options_'. $node->type] = array(
 
'#type' => 'checkboxes',
 
'#title' => t('Default options'),
 
'#default_value' => variable_get('node_options_'. $node->type, array('status', 'promote')),
 
'#options' => array(
   
'status' => t('Published'),
   
'moderate' => t('In moderation queue'),
   
'promote' => t('Promoted to front page'),
   
'sticky' => t('Sticky at top of lists'),
   
'revision' => t('Create new revision'),
  ),
 
'#description' => t('Users with the <em>administer nodes</em> permission will be able to override these options.'),
);
?>

Merci de votre aide

Forum : 
Version de Drupal : 

Je ne comprends pas, car on indique l'attribut #default_value avant d'appeler l'attribut #options

Comment dire que l'on en veut plusieurs de sélectionné? Faut il faire un tableau avec quelque chose du genre

<?php
'#default_value' => array ('status', 'moderate', 'promote'),
'#options' => array(
   
'status' => t('Published'),
   
'moderate' => t('In moderation queue'),
   
'promote' => t('Promoted to front page'),
   
'sticky' => t('Sticky at top of lists'),
   
'revision' => t('Create new revision'),
  ),
?>

Oui normalement ce genre de chose devrait fonctionner.

L'ordre de création des attribut d'un élément du form n'a pas d'importance.
Cela revient au même de mettre #default_value avant ou après #options

Ici c'est cette ligne qui détermine les cases qui seront cochées par défaut.

<?php
'#default_value' => array ('status', 'moderate', 'promote'),
?>

Les valeurs contenues dans le tableau doivent être les clés du tableau '#options' que l'on souhaite cocher par défaut.

si tu fais un variable_get() de la variable qui reçoit les options cochées de ta checkbox tu verra que celle-ci va contenir a peu prêt ça :

<?php
array(
   
'status' => 0,
   
'moderate' => 'In moderation queue',
   
'promote' => 0,
   
'sticky' => 0,
   
'revision' => 'Create new revision',
  );
?>

les valeur a 0 correspondent aux valeur non cochées. par conséquent as-tu essayé de mettre en défault value ton tableau de valeur avec 0 devant celles qui ne doivent pas être cochées

Petit question/infos sur les checkboxes présenté dans l'API :

<?php
$form
['node_options_'. $node->type] = array(
 
'#type' => 'checkboxes',
 
'#title' => t('Default options'),
 
'#default_value' => variable_get('node_options_'. $node->type, array('status', 'promote')),
 
'#options' => array(
   
'status' => t('Published'),
   
'moderate' => t('In moderation queue'),
   
'promote' => t('Promoted to front page'),
   
'sticky' => t('Sticky at top of lists'),
   
'revision' => t('Create new revision'),
  ),
 
'#description' => t('Users with the <em>administer nodes</em> permission will be able to override these options.'),
);
?>

Lorsque on entre un code identique, drupal affiche un warning :

Invalid argument supplied for foreach() in C:\Program Files\wamp\www\drupal2\includes\form.inc on line 1211.

Le problème vient de la ligne '#default_value'.
Il faut obligatoirement lui envoyer un array contenant les différentes valeurs par défaut et pas simplement variable_get(...).
Donc à remplacer :

<?php
'#default_value' => variable_get('node_options_'. $node->type, array('status', 'promote')),
?>

par :

<?php
'#default_value' => array(variable_get('node_options_'. $node->type, array('status', 'promote'))),
?>

Est ce que je suis le seul à avoir le problème ou est ce récurrent ?