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.