Maison  >  Questions et réponses  >  le corps du texte

Les éléments du menu déroulant personnalisé ne fonctionnent pas correctement dans Yii 2

<p>Je crée ma propre fonction de liste déroulante dans Yii 2. J'ai créé une fonction et une vue et dans la vue j'ai plusieurs éléments dans mon formulaire déroulant. </p> <pre class="brush:php;toolbar:false;"><?= $form->customDropDown($dpForm, 'color', [ 'articles' => [ 'étiquette' => 'rouge', 'valeur' ​​=> 'rouge', 'options' => 'style' => 'couleur : rouge' ] ] [ 'étiquette' => 'bleu', 'valeur' ​​=> 'bleu', 'options' => 'style' => 'couleur : bleu' ] ] ] ≪/pré> <p>La fonction que j'ai créée est la suivante (elle utilise et se trouve dans ActiveForm) : </p> <pre class="brush:php;toolbar:false;"> fonction publique customDropdown($model, $attribute, $items = [], $options = []) { $value = Html::getAttributeValue($model, $attribute); $champ = $this->champ($modèle, $attribut, $options); return $this->staticOnly ? $field : $field->dropDownList($items); } ≪/pré> <p>Le problème est que lorsque j'ouvre ma liste déroulante, tout est une option ou un groupe d'options, pas seulement les options avec des étiquettes et des styles. </p> <p>L'effet d'affichage dans <em>Inspector</em> est le suivant :</p> <pre class="brush:html;toolbar:false;"><optgroup label='0'> <valeur d'option="étiquette">rouge</option> <valeur d'option="valeur">rouge</option> </groupe opt> <optgroup label="options"> <valeur de l'option="style">couleur : rouge</option> </groupe opt> ≪/pré> <p>Et ainsi de suite. L'effet que je souhaite est le suivant : </p> <pre class="brush:html;toolbar:false;"><option value="red" style="couleur : rouge">rouge</option> ≪/pré> <p>Mais je n’arrive pas à obtenir cet effet. </p>
P粉268284930P粉268284930433 Il y a quelques jours553

répondre à tous(1)je répondrai

  • P粉801904089

    P粉8019040892023-09-06 14:29:43

    Afin d'obtenir le résultat souhaité, où chaque élément de la liste déroulante est représenté par une seule balise <option> avec l'étiquette, la valeur et le style spécifiés, vous devez modifier votre code comme suit : Dans votre fichier de vue, mettez à jour l'appel de fonction customDropDown pour transmettre correctement le tableau items :

    <?= $form->customDropDown($dpForm, 'color', [
            [
                'label' => 'red',
                'value' => 'red',
                'options' => [
                    'style' => 'color: red'
                ]
            ],
            [
                'label' => 'blue',
                'value' => 'blue',
                'options' => [
                    'style' => 'color: blue'
                ]
            ],
        ]
    ); ?>
    Méthode mise à jour :
    public function customDropdown($model, $attribute, $items = [], $options = [])
    {
        $value = Html::getAttributeValue($model, $attribute);
    
        $field = $this->field($model, $attribute);
    
        $options['options'] = array_column($items, 'options');
        $options['prompt'] = '';
    
        return $this->staticOnly ? $field : $field->dropDownList(array_column($items, 'label', 'value'), $options);
    }
    Dans cette version mise à jour, nous transmettons le tableau $options directement à dropDownList方法,并使用array_columnExtraire les paires étiquette-valeur du tableau $items

    répondre
    0
  • Annulerrépondre