Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CakePHP multiple select "selected" is not working

Tags:

cakephp-1.3

I have a multiple select input in my edit form:-

<?php echo $this->Form->input('Article.tags', array('type' => 'select', 'multiple' => true, 'options' => $tags, 'selected' => array($selected))); ?>

When echo-ed, the $selected variable will look like this:-

"MySQL", "PHP"

However, the input does not automatically select the option that matches the tag.

However, when I manually put in the selected option, it will automatically select that two option; e.g.

<?php echo $this->Form->input('Article.tags', array('type' => 'select', 'multiple' => true, 'options' => $tags, 'selected' => array("MySQL", "PHP"))); ?>

Is there anyway to fix this? Thanks.

like image 406
John Doe Avatar asked Apr 20 '12 09:04

John Doe


4 Answers

Ahh, I got this fixed.

I was looking at the wrong direction. I assumed that the selected values should be in string form with quotes and comma separated. (e.g. "MySQL", "PHP", "jQuery").

Instead, it should be in array format without any quote and comma. e.g.

Array
(
    [0] => MySQL
    [1] => PHP
    [2] => jQuery
)

Once I've got the array sorted out I pass it into view; e.g. $this->set('selected', $myArray);

Then on the form, I would just have to echo it out like this:-

<?php echo $this->Form->input('Article.tags', array('type' => 'select', 'multiple' => true, 'options' => $tags, 'selected' => $selected)); ?>
like image 185
John Doe Avatar answered Oct 31 '22 00:10

John Doe


Use default keyword:

<?php echo $this->Form->input('Article.tags',array('options'=>$tags,'type'=>'select','label'=>'TDSP','class'=>'distributeSelect','multiple'=> 'true','default' => $selected));?>
like image 4
user2659555 Avatar answered Oct 30 '22 23:10

user2659555


In CakePHP 3.x version, You can set value to preselect from the lists

echo $this->Form->select(
    'Article.tags',
    ['PHP','MySQL','jQuery','AJAX'],
    [
        'multiple' => true,
        'value' => ['MySQL','AJAX']
    ]
);

HTML elements with values MySQL and AJAX will be rendered as preselected

like image 2
Sumon Sarker Avatar answered Oct 30 '22 22:10

Sumon Sarker


No need to do selected attribute

For e.g:

in controller:

$this->request->data = $this->Article->read(null, $id);

$this->set(array(
        'centers' => $this->Center->find('list'),
        'shopCategories' => $this->ShopCategory->find('list'),
        'brands' => $this->Brand->find('list')
    ));

in view:

echo $this->Form->input('Center', array('multiple' => 'multiple')); 

that's all!

like image 1
mindsupport Avatar answered Oct 30 '22 23:10

mindsupport