web-dev-qa-db-fra.com

Groupe de boutons radio placé séparément dans yii2

Donc, je veux avoir deux boutons radio séparés, j'ai essayé de chercher la solution et tout le monde suggère d'utiliser radiolist, ce qui n'est pas possible dans mon cas.

Si je le mets comme ceci (bouton work_part_time): (ci-dessous)

<div class="row">
    <div class="col-sm-2">
        <?= $form->field($model, 'work_part_time')->radio(['label' => 'yes', 'value' => 1])?>
    </div>-

    <div class="col-sm-3">
        <?= $form->field($model, 'hour_week')->textInput(['type' => 'number', 'placeholder' => 'Hour/Week'])->label(false)?>
    </div>

    <div class="col-sm-3">
        <?= $form->field($model, 'part_time_rate')->textInput(['type' => 'number', 'placeholder' => 'rate/hour(SGD)'])->label(false)?> 
    </div>
</div>

<div class="form-group">
    <?= $form->field($model, 'work_part_time')->radio( [0 => 'No'])->label('No')?>
</div>
<hr>
<div class="row">
    <div class="col-sm-2">
        <?= $form->field($model, 'work_part_time')->radio(['label' => 'yes', 'value' => 1])?>
    </div>-

    <div class="col-sm-3">
        <?= $form->field($model, 'hour_week')->textInput(['type' => 'number', 'placeholder' => 'Hour/Week'])->label(false)?>
    </div>

    <div class="col-sm-3">
        <?= $form->field($model, 'part_time_rate')->textInput(['type' => 'number', 'placeholder' => 'rate/hour(SGD)'])->label(false)?> 
    </div>
</div>

<div class="form-group">
    <?= $form->field($model, 'work_part_time')->radio( [0 => 'No'])->label('No')?>
</div>
<hr>

Je peux seulement obtenir 0 pour la valeur.

Quelqu'un a trouvé la solution pour cela?

5
Robert Limanto

Yii attribuera une valeur cochée ou non cochée au bouton radio en fonction de la valeur de l'attribut stocké. Ainsi, si la valeur est 0, le bouton portant la valeur 0 sera coché. Votre problème semble avoir été l'entrée masquée que Yii a automatiquement sélectionnée. génère. Comme d'autres l'ont suggéré, vous devez définir ceci sur null si vous souhaitez plusieurs boutons d'option pour le même champ.

Si l'utilisateur coche un autre bouton, tous les autres boutons radio portant le même nom seront décochés. Le nom de l’attribut est généré automatiquement par Yii lorsqu’il crée le bouton. Essayez ceci avec vos boutons radio:

<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 1', 'value' => 1, 'uncheck' => null]) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 2', 'value' => 0, 'uncheck' => null]) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 3', 'value' => 2, 'uncheck' => null]) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option4', 'value' => 3, 'uncheck' => null]) ?>

Chaque bouton nécessite une valeur différente. Il s'agit de la valeur qui sera stockée dans votre champ lors de la sauvegarde de l'enregistrement.

Il ne peut y avoir qu'un seul bouton coché. Par conséquent, si vous avez plusieurs boutons avec la même valeur et le même nom, comme vous semblez le voir dans vos exemples, seul le dernier bouton de l'ensemble sera coché. Je ne sais pas comment contourner cela. Je vous suggère d'utiliser <formgroup> pour scinder votre formulaire en sections logiques, chaque section indiquant si work_part_time est yes ou no. Vous semblez avoir commencé à faire ça!

10
Joe Miller

J'ai personnellement vérifié votre code dans mon système. Ce code renvoie 0 ou 1 (en fonction de la sélection du bouton radio). Il fonctionne correctement. Vous pouvez utiliser mon code.

Dans le code ci-dessous, si vous souhaitez donner label as Travailler à temps partiel ou autre, mettez-le dans ->label('Work Part Time');

.
. // Your code
<?= $form->field($model, 'work_part_time')->radioList([1 => 'yes', 0 => 'No'])->label('Work Part Time'); ?>  
.
. // Your code

ET

1) Si vous voulez cocher le bouton ' Oui ' en tant que cocher la case par défaut , vous devez assigner comme ceci <?php $model->status_id = 1?>

.
. // Your code
<?php $model->status_id = 1?>
<?= $form->field($model, 'work_part_time')->radioList([1 => 'yes', 0 => 'No'])->label('Work Part Time'); ?> 
.
. // Your code

2) Si vous voulez cocher la case d'option ' Non ' comme coché par défaut /, alors vous devez assigner comme ceci <?php $model->status_id = 0?>

.
. // Your code
<?php $model->status_id = 0?>
<?= $form->field($model, 'work_part_time')->radioList([1 => 'yes', 0 => 'No'])->label('Work Part Time'); ?>  
.
.//Your code
2
Nana Partykar

essaye ça:

<?php echo $form->radioButton($model,'user_work_part_time',array('value'=>1,'uncheckValue'=>null)); 
$form->radioButton($model,'user_work_part_time',array('value'=>0,'uncheckValue'=>null)); 
?>

add 'uncheckValue' => null dans le tableau htmlOption cela fonctionnera.

1
Amitesh Kumar

Si vous remplacez "décocher" par "décocherValeur", la réponse votée fonctionnera, sauf qu'elle ne publiera que la valeur de la dernière radio de la liste si elle est sélectionnée et 0 pour le reste. Pour que cela fonctionne et que les valeurs sélectionnées soient affichées comme prévu, j'ai ajouté du code JS. J'espère que cela aidera quelqu'un sur la route.

<!-- Complete solution for Radio buttons on separate places Yii2 together with its JS function-->
<php use  yii\web\View; ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 1', 'value' => 1, 'uncheckValue' => null,'onChange'=>' if($(this).prop("checked")){ var radioValue = 1;$(this).val(radioValue); var radioName = "Model[work_part_time]"; RadioSelected(radioName,radioValue);}else{$(this).val("")};']) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 2', 'value' => 0, 'uncheckValue' => null,'onChange'=>' if($(this).prop("checked")){ var radioValue = 0; $(this).val(radioValue); var radioName = "Model[work_part_time]"; RadioSelected(radioName,radioValue);}else{$(this).val("")};']) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 3', 'value' => 2, 'uncheckValue' => null,'onChange'=>' if($(this).prop("checked")){ var radioValue = 2; $(this).val(radioValue); var radioName = "Model[work_part_time]"; RadioSelected(radioName,radioValue);}else{$(this).val("")};']) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option4', 'value' => 3, 'uncheckValue' => null,'onChange'=>' if($(this).prop("checked")){var radioValue = 3; $(this).val(radioValue);  var radioName = "Model[work_part_time]"; RadioSelected(radioName,radioValue);}else{$(this).val("")};']) ?>
<?php
//JS Function
$RadioONSeparatePlaceJS = <<<JS
function RadioSelected(radioName,radioValue)
{
   $('input[name="' + radioName + '"]').val(radioValue);
}

JS;
$this->registerJs($RadioONSeparatePlaceJS,View::POS_HEAD);
?>

Merci pour l'excellente réponse Joe Miller.

0
Bumbuli