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.


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.


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é?


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é.


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];


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.


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',
        );  

-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.


-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 :-)


-1

essayer:

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

C'est bon pour moi.


-2

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

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

-4

Utilisez simplement

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

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


-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;

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.