Définir la valeur par défaut de la liste de sélection [fermé]

16

J'ai une liste de sélection avec des options:

$options = array(0 => '0', 500 => '500', 1000 => '1000'); 

J'essaie de définir sa valeur par défaut à 500:

$form['price']['min']['#options'] = $options; 
$form['price']['min']['#default_value'] = 500;

Mais ça ne marche pas.

briser
la source
1
J'ai rencontré le même problème. Le problème était que je ne rendais pas le formulaire en utilisant drupal_get_form (), mais d'une autre manière à cause du cas d'utilisation.
user1750
J'ai rencontré la même question !!!! qui peut m'aider?
bluesky_still
1
500 doit être un '500', la chaîne n'est pas un entier.
saadlulu

Réponses:

3

Votre code doit fonctionner, utilisez généralement la valeur de clé comme valeur par défaut, s'il ne fonctionne pas, créez la chaîne comme clés et utilisez-la comme valeur par défaut.

Ashok KS
la source
2

Je n'ai jamais vu ce problème. Cette valeur par défaut devrait fonctionner. Je dirais essayer de faire de la clé une chaîne et de la définir #default_valuecomme une chaîne. Le #optionstableau peut être en cours de passage array_merge quelque part, recomposant ainsi les clés entières. Si les clés sont des chaînes, cela ne devrait pas se produire. Actuellement, votre tableau ressemble à ceci:

$options = array(
  0 => '0',
  500 => '500',
  1000 => '1000',
);

Mais le passage de ce tableau array_mergepeut réorganiser ces clés entières pour qu'elles soient dans un ordre séquentiel:

$options = array(
  0 => '0',
  1 => '500',
  2 => '1000',
);

Si cela se produit, la 500clé n'existe tout simplement pas. En effet, array_mergen'aime pas conserver les clés entières, mais vous pouvez utiliser des chaînes pour l'empêcher. Donc, je pense que votre tableau devrait ressembler davantage à ceci:

$options = array(
  '0' => '0',
  '500' => '500',
  '1000' => '1000',
);

Ensuite, vous pouvez définir votre #default_value:

$form['price']['min']['#default_value'] = '500';

Sinon, y a-t-il ailleurs où le default_valuepeut être annulé?

jordojuice
la source
2

Avez-vous essayé d'utiliser une chaîne au lieu d'un entier?

$form['price']['min']['#default_value'] = "500"

Peut-être vaut-il aussi la peine d'essayer d'ajouter la 'und'clé.

soieAdmin
la source
1

Avez-vous essayé d'utiliser la clé des options $ du tableau pour définir la valeur par défaut?
$form['price']['min']['#default_value'] = $options[500];

JurgenR
la source
Si cela est fait, il passera techniquement juste la valeur de $ options [500], qui est (chaîne) '500'.
jordojuice
1
$options = array(0 => '0', 500 => '500', 1000 => '1000'); 
$form['price'] = array(
          '#type' => 'select',
          '#options' => $options,
          '#default_value' => 500,
        );

Afin de définir la valeur par défaut dans la liste de sélection, nous utilisons le paramètre #default_value. La valeur de l'attribut default_value de la liste de sélection serait la clé du tableau de liste de sélection.

Nitesh Sethia
la source
0

Le code suivant affichera le champ avec sa valeur par défaut 500.

$options = array(0 => '0', 500 => '500', 1000 => '1000'); 
$form['price'] = array(
          '#type' => 'select',
          '#options' => $options,
          '#default_value' => 500,
          '#title' => 'Price',
        );  
Aswini K
la source
-1

J'ai fait face au même problème et j'ai essayé de donner l'index du tableau que je veux être la valeur par défaut et cela a fonctionné. Ma réponse est similaire à Ashok KS mais sa deuxième ligne je ne pouvais pas comprendre.

AgA
la source
-1

fixe, nous devrions définir la valeur par défaut en premier de ce tableau $ option, si nous avons ajouté en dernier, la clé du tableau a changé [1] => science, [2] => drama, la droite devrait être [192] => science, [231 ] => drame :-)

bluesky_still
la source
-1

essayer:

$ form ['price'] ['# default_value'] = 500;

C'est bon pour moi.

Tasneem
la source
-2

Le #default_valuedevrait avoir ses arguments sous la forme du #value.

$form['price']['min']['#default_value'] = $options['500'];
bluesky_still
la source
-4

Utilisez simplement

$form['price']['min']['#default_value'] = 2 

ce qui signifie que la valeur par défaut prendra l'option 2eme

stevey
la source
-5

SOLUTION: découvrez que form_select_options ne gère pas #default_valuedu tout. J'ai donc utilisé #value property:

$form['price']['min']['#value'] = isset($_REQUEST['price']['min']) ? $_REQUEST['price']['min'] : $my_default_value;
briser
la source
2
Les options de sélection ont une valeur par défaut. La définition du paramètre #valueempêchera également l'utilisateur de modifier la valeur.
googletorp
1
Regardez le code, j'ai défini #value sur default_value uniquement s'il n'y a aucune valeur dans #value.
breethe
Vous définissez toujours une valeur sur #value, soit $_REQUEST['price']['min']ou $my_default_value. Tout ce que vous mettez dans la valeur # sera la valeur du champ indépendamment de ce que l'utilisateur saisit.
googletorp
Si l'utilisateur entre une valeur, cette valeur est envoyée via GET ($ _REQUEST ['price'] ['min']). Donc, si la valeur des entrées utilisateur est définie sur #value, entrez #value = $ my_default_value
breethe
C'est le problème. Les utilisateurs peuvent utiliser la sélection, mais peu importe ce qu'ils sélectionnent, le résultat sera le même.
googletorp