2012-04-20 46 views
12

Tengo una entrada de selección múltiple en mi formulario de edición: -CakePHP selección múltiple "seleccionado" no está funcionando

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

Cuando eco-ed, la variable $selected se verá así: -

"MySQL", "PHP" 

Sin embargo, la entrada no selecciona automáticamente la opción que coincide con la etiqueta.

Sin embargo, cuando coloque manualmente la opción seleccionada, seleccionará automáticamente esas dos opciones; p.ej.

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

¿Hay alguna forma de arreglar esto? Gracias.

Respuesta

16

Ahh, tengo esta fijo.

Estaba mirando en la dirección incorrecta. Supuse que los valores seleccionados deberían estar en forma de cadena con comillas y separados por comas. (por ejemplo, "MySQL", "PHP", "jQuery").

En su lugar, debe estar en formato de matriz sin comillas y comillas. p.ej.

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

Una vez que tengo la matriz resuelta, la paso a la vista; p.ej. $ this-> set ('selected', $ myArray);

A continuación, en la forma, que sólo tendría hacer eco a cabo de esta manera: -

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

php torta se basa totalmente en la convención de nomenclatura y la matriz formateo ..

tratar de hacer de esta manera: -

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

Hola, Lo intenté y parece que no funciona. –

1

uso de palabras clave por defecto:

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

No hay necesidad de hacer atributo seleccionado

Para por ejemplo:

en el controlador:

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

a la vista:

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

eso es todo!

0

En CakePHP versión 3.x, se puede establecer value para preseleccionar de las listas

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

elementos HTML con valores MySQL y AJAX será mostrado como preseleccionado