J'utilise
$form->input('Model.name', array('multiple'=>'checkbox');
J'essaie de me baser sur les données du modèle pour définir certaines cases à cocher sur cochées.
Comment puis je faire ça?
la solution de cmptrgeekken fonctionne pour une seule case à cocher. Je suppose que vous générez plusieurs cases à cocher, pour une relation HABTM ou quelque chose de similaire.
Vous devez passer un tableau avec les valeurs des éléments qui vont être sélectionnés pour la méthode, comme ceci:
$options = array(1 => 'ONE', 'TWO', 'THREE');
$selected = array(1, 3);
echo $form->input('Model.name', array('multiple' => 'checkbox', 'options' => $options, 'selected' => $selected));
va générer ceci:
<div class="input select">
<label for="ModelName">Name</label>
<input name="data[Model][name]" value="" type="hidden">
<div class="checkbox">
<input name="data[Model][name][]" checked="checked" value="1" id="ModelName1" type="checkbox">
<label for="ModelName1" class="selected">ONE</label>
</div>
<div class="checkbox">
<input name="data[Model][name][]" value="2" id="ModelName2" type="checkbox">
<label for="ModelName2">TWO</label>
</div>
<div class="checkbox">
<input name="data[Model][name][]" checked="checked" value="3" id="ModelName3" type="checkbox">
<label for="ModelName3" class="selected">THREE</label>
</div>
</div>
Les première et troisième cases à cocher sont cochées.
Rappelez-vous simplement que vous travaillez en fait avec un élément de sélection multiple qui est simplement affiché sous forme de tas de cases à cocher (ce qui est préférable pour OMI en raison de sa facilité d'utilisation).
Je n'utilise pas CakePHP, mais selon la documentation, il semble que vous devriez pouvoir ajouter l'option 'checked'=>true
:
$form->input('Model.name', array('type'=>'checkbox','checked'=>true));
puisque c'est l'une des options de la case à cocher fonction.
$ options = array (1 => 'ONE', 'TWO', 'THREE'); $ selected = array (1, 3); echo $ form-> input ('Model. name ', array ( "name" => $ mnus [' Aco '] [' id '], "type" => "select", "multiple" => " case à cocher ", 'options' => $ options, 'sélectionné' => $ sélectionné) );
c'est la bonne façon de cocher plusieurs cases et de cocher l'option. J'utilise ceci dans cake1.3 s'il vous plaît revérifier une fois sur votre code, il doit fonctionner.
echo $this->Form->input('Title', array('type'=>'checkbox', 'label'=>'Label', 'checked'=>'checked'));
La solution Marko fonctionne toujours dans CakePHP 2.0+
-> https://stackoverflow.com/a/1962499/3197383
Il suffit de corriger avec la nouvelle syntaxe:
<?php
$options = array(1 => 'ONE', 'TWO', 'THREE');
$selected = array(1, 3);
echo $this->Form->input('ModelName',
array('multiple' => 'checkbox', 'options' => $options, 'selected' => $selected)
);
?>
Une autre façon d'avoir une case à cocher avec le "label" juste à côté est.
$form->checkbox('Model.name', array('checked'=>'checked'))?> Label
L'étiquette peut être ce que vous voulez quand même. exemple: 21 000-3 000, Tyre, Humain. Je suis sûr que vous avez l’idée.
<?php
$subjects = array(1=>'Snow boarding',2=>'Surfing',3=>'Trekking',4=>'Swimming');
$selected_skills = array(0=>2,1=>4);
// For MutiSelect box with selected
$form->input('skills_list',array('label' => 'Skills','options' => $subjects,'class' =>'','multiple'=>true,'selected'=> $selected_skills));
//For Multiple checkbox with checked
$form->input('skills_list',array('label' => 'Skills','options' => $subjects,'class' =>'','multiple'=>'checkbox','selected'=> $selected_skills));
?>
'likes_preferences' =>array(
'type'=>'select','label' => 'Main likes/preferences',
'options' => $this->Ethos->toOptionsArray('preferences'),
'multiple' => 'checkbox',
'div'=>array('class'=>'input select checkbox-group clearfix'),
'hiddenField' => false,
),
le code ci-dessus pour l'ajout de données, vous devez changer le champ 'likes_preferences' d'un tableau à une chaîne séparée par des virgules avant de l'enregistrer dans la base de données.
$preferences = implode(',',$this->request->data['Member']['likes_preferences']);
$this->request->data['Member']['likes_preferences'] = $preferences;
$likes = explode(',',$this->request->data['Member']['likes_preferences']);
'likes_preferences' =>array(
'type'=>'select','label' => 'Main likes/preferences',
'options' => $this->Ethos->toOptionsArray('preferences'),
'multiple' => 'checkbox',
'div'=>array('class'=>'input select checkbox-group clearfix'),
'hiddenField' => false,
'selected' => $likes
),
vous avez terminé, encore une fois, vous devez convertir le tableau en chaîne lors de la mise à jour de la base de données dans l'action d'édition.
Voici un petit extrait de code d'un de mes projets.
$categories = $this->Site->Category->find('list', array('recursive' => -1));
$this->set(compact('categories'));
$this->Site->Category->bindModel(array('hasOne' => array('CategoriesSite')));
$selected = $this->Site->Category->find('list', array(
'fields' => array('id'),
'conditions' => array(
'CategoriesSite.site_id' => $this->data['Site']['id'],
),
'recursive' => 0,
));
$this->set(compact('selected'));
La clé principale est pour 'fields' => array('id')
sélectionnée
$options = array("fixed","varry");
$selected = "0";
echo $form->input('Model.name', array('multiple' => 'checkbox', 'options' => $options, 'value' => $selected));
Utilisez l'attribut value
pour rendre coché par défaut.
C'est super simple
$form->input('field_name', array('type'=>'checkbox','checked'=>true));
C'est tout.
Documentation: https://book.cakephp.org/3.0/en/views/helpers/form.html