Cane有人给我一个关于此的想法!
I从与另一个具有HABTM关系关联的表相关的表中生成多个复选框。 我想生成多个带有图像的复选框以及标签中的文本。
我的两个表格是项目和items_characteristics。所以一个项目HasAndBelongToMany特征,一个ItemCharacteristic HasAndBelongToMany项目。
echo $this->Form->input('Item.ItemCharacteristic',array(
'label' =>false,
'type'=>'select',
'multiple'=>'checkbox',
'options' => $itemCharacteristics ,
'selected' => $this->Html->value('ItemCharacteristic.ItemCharacteristic')
));
此代码正确生成复选框列表并完美运行: 这就是我所拥有的:
这是从表items_characteristics中的DB生成的。
这就是我想要的:
有没有人有任何想法我怎么能做到这一点?
答案 0 :(得分:4)
我认为在你的控制器中你做了类似的事情:
$this->request->data = $this->Item->find('first', ... );
以便$data
包含有关子阵列形式的选定特征的信息,
编辑:我还假设Item
habtm ItemCharacteristic
然后在你看来
$checked_characteristics = Hash::extract($this->data, 'ItemCharacteristic.{n}.id');
foreach($itemCharacteristics as $id => $itemCharacteristic )
{
$checked = in_array($id, $checked_characteristics );
$img = $this->Html->image('cake.icon.png'); // put here the name
// of the icon you want to show
// based on the charateristic
// you are displayng
echo $this->Form->input(
'ItemCharacteristic.ItemCharacteristic.',
array(
'between' => $img,
'label' => $itemCharacteristic,
'value' => $id,
'type' => 'checkbox',
'checked' => $checked
)
);
}
编辑:从您的评论中我了解$itemCharacteristics
来自find('list'
)声明。
将其更改为find('all', array('recursive' => -1));
现在您的代码变为
foreach($itemCharacteristics as $itemCharacteristic )
{
$id = $itemCharacteristic['ItemCharacteristic']['id'];
$icon_name = $itemCharacteristic['ItemCharacteristic']['icon_name']; //or wherever you get your icon path
$img = $this->Html->image($icon_name);
$itemCharacteristicName = $itemCharacteristic['ItemCharacteristic']['name'];
// same as above
}