Показать изображение рядом с флажками HABTM

Cane Кто-нибудь, дайте мне идеи по этому вопросу, пожалуйста!

Я сгенерирую несколько флажков из таблицы, которая связана с другой таблицей, имеющей связь HABTM. Я хотел бы создать несколько флажков с изображением вместе с текстом на этикетке.

Мои две таблицы являются items и items_characteristics. Таким образом, у элемента есть свойства HasAndBelongToMany, а у элемента ItemCharacteristic HasAndBelongToMany Items.

echo $this->Form->input('Item.ItemCharacteristic',array(
    'label' =>false,
    'type'=>'select',
    'multiple'=>'checkbox',
    'options' => $itemCharacteristics ,
    'selected' => $this->Html->value('ItemCharacteristic.ItemCharacteristic')
));

Этот код генерирует список флажков правильно и отлично работает: это то, что у меня есть:

Который генерируется из БД из таблицы items_characteristics.

И это то, что я хочу иметь:

Кто-нибудь есть какие-либо идеи, как я могу достичь этого, пожалуйста?

1 ответ

Решение

Я предполагаю, что в вашем контроллере вы сделали что-то вроде:

$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
}
Другие вопросы по тегам