显示HABTM复选框旁边的图像

时间:2014-04-07 10:44:26

标签: cakephp has-and-belongs-to-many

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

此代码正确生成复选框列表并完美运行: 这就是我所拥有的: enter image description here

这是从表items_characteristics中的DB生成的。

这就是我想要的:

enter image description here

有没有人有任何想法我怎么能做到这一点?

1 个答案:

答案 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
}