cakephp: Как установить флажок для флажка? - PullRequest
26 голосов
/ 26 декабря 2009

Я использую

$form->input('Model.name', array('multiple'=>'checkbox');

Я пытаюсь опираться на данные модели, чтобы установить определенные флажки для проверки.

Как я могу это сделать?

Ответы [ 11 ]

30 голосов
/ 26 декабря 2009

Решение cmptrgeekken работает для одного флажка. Я предполагаю, что вы генерируете несколько флажков для отношения HABTM или чего-то подобного.

Вам нужно передать массив со значениями элементов, которые будут выделены методу, например:

$options = array(1 => 'ONE', 'TWO', 'THREE');
$selected = array(1, 3);
echo $form->input('Model.name', array('multiple' => 'checkbox', 'options' => $options, 'selected' => $selected));

собирается сгенерировать это:

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

Первый и третий флажок отмечены.

Просто помните, что вы на самом деле работаете с элементом множественного выбора, который просто отображается в виде набора флажков (что лучше для IMO из-за удобства использования).

23 голосов
/ 26 декабря 2009

Я не использую CakePHP, но, согласно документации, похоже, что вы должны иметь возможность добавить опцию 'checked'=>true:

$form->input('Model.name', array('type'=>'checkbox','checked'=>true));

, поскольку это одна из опций функции флажок .

2 голосов
/ 17 ноября 2012
echo $this->Form->input('Title', array('type'=>'checkbox', 'label'=>'Label', 'checked'=>'checked'));
2 голосов
/ 10 февраля 2011
$options = array(1 => 'ONE', 'TWO', 'THREE');
$selected = array(1, 3);
echo $form->input('Model.name', 
    array( 
        "name"=>$mnus['Aco']['id'],
        "type"=>"select",
        "multiple"=>"checkbox", 
        'options' => $options, 
        'selected' => $selected)
    );

это правильный путь для нескольких флажков и отмеченных опций. Я использую это в cake1.3, пожалуйста, перепроверьте один раз на вашем коде, он должен работать.

1 голос
/ 03 июня 2014

Решение Marko все еще работает в CakePHP 2.0 +

-> https://stackoverflow.com/a/1962499/3197383

Это просто нужно исправить с новым синтаксисом:

<?php
$options = array(1 => 'ONE', 'TWO', 'THREE');
$selected = array(1, 3);
echo $this->Form->input('ModelName', 
    array('multiple' => 'checkbox', 'options' => $options, 'selected' => $selected)
);
?>
0 голосов
/ 11 августа 2018

Это супер просто

$form->input('field_name', array('type'=>'checkbox','checked'=>true));

Вот и все.

Документация: https://book.cakephp.org/3.0/en/views/helpers/form.html

0 голосов
/ 09 апреля 2014
'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,
),

Приведенный выше код для добавления данных необходимо изменить в поле «likes_preferences» с массива на строку, разделенную запятыми, перед сохранением в базу данных.

$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
),

все готово, снова вы должны преобразовать массив в строку при обновлении базы данных в действии редактирования.

0 голосов
/ 17 января 2013
$options = array("fixed","varry");
$selected = "0";

echo $form->input('Model.name', array('multiple' => 'checkbox', 'options' => $options, 'value' => $selected));

Используйте атрибут value, чтобы установить флажок по умолчанию.

0 голосов
/ 07 мая 2011

Вот небольшой фрагмент кода из одного из моих проектов-

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

Основная клавиша для выбранного: 'fields' => array('id')

0 голосов
/ 13 ноября 2010
<?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));
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...