2015-06-29 3 views
2

Кто-нибудь знает, как добавить класс в параметр выбора в файле вида?CakePHP select option class

У меня есть на данный момент:

echo $this->Form->input(
       'shelf_id', 
       array(
        'options' => $Shelves, 
        'label'=> 'Etagère :', 
        'default' => $Place['Place']['shelf_id'], 
        'class'=>'form-control') 
      ); 

Все мои варианты элемента, как это:

<option value="1">Element</option> 

Но я хочу, чтобы они были так:

<option value="1" class="myClass">Etagere 1</option> 

Значение класса опций должен быть идентификатором каждой полки, но у меня есть сейчас:

<select> 
<option class="1" value="1">Etagere 1</option> 
<option class="1" value="2">Etagere 2</option> 
<option class="1" value="3">Etagere 3</option> 
<option class="1" value="4">Etagere 4</option> 
<option class="1" value="5">Etagere 5</option> 
<option class="1" value="6">Etagere 6</option> 
</select> 

Но я хочу, чтобы class = "..." с идентификатором каждого идентификатора полки.

ответ

2

Я не считаю, что Cake предоставляет простой способ добавления класса к отдельным тегам <option>.

Что вы можете сделать, это самостоятельно построить параметры, используя Html::tag(), не забывая учитывать параметр selected. Например, вы могли бы сделать что-то немного, как следующее: -

<select> 
<?php 
    // Work out what the selected value is (falling back on a default) 
    $selected = !empty($this->request->data['Place']['shelf_id']) ? $this->request->data['Place']['shelf_id'] : $Place['Place']['shelf_id']; 
    // Generate the <option> tags 
    foreach ($Shelves as $key => $val) { 
     echo $this->Html->tag(
      'option', 
      $val, 
      array(
       'class' => 'myClass', 
       'value' => $key 
       'selected' => $selected === $key ? 'selected' : null 
      ) 
     ) 
    } 
?> 
</select> 

Вы должны были бы поставить правильные атрибуты на <select> тег и добавить ярлык к этому. Вы должны уметь видеть, что это такое, глядя на разметку, создаваемую кодом в вашем вопросе.

Update

Для класса <option> тег, чтобы быть таким же, как его значение просто передать $key атрибуту class: -

foreach ($Shelves as $key => $val) { 
    echo $this->Html->tag(
     'option', 
     $val, 
     array(
      'class' => $key, 
      'value' => $key 
      'selected' => $selected === $key ? 'selected' : null 
     ) 
    ) 
} 
+0

Спасибо, что начало! Мне нужно найти, как печатать для каждой полки, потому что на данный момент он печатает один и тот же идентификатор. – Raphael

+0

@ Raphael Я не понимаю, что вы имеете в виду, напечатав тот же 'id'. Является ли массив '$ Shelves' в правильном формате' primaryKey => displayField'? – drmonkeyninja

+0

Я редактировал свой вопрос. В настоящее время у меня есть идентификатор полки выбранной полки, но мне нужен идентификатор полки для каждого из них. – Raphael

0

создать $Shelves массив как это

$Shelves = array(
    array('value' => 1, 'name' => 'first option', 'class' => 1), 
    array('value' => 2, 'name' => 'second option', 'class' => 2), 
    array('value' => 3, 'name' => 'third option', 'class' => 3) 
); 

см. Это link

0

Метод 'arilia' имеет в виду, похоже, больше не работает. У меня был подготовлен массив, как описано, но вместо того, чтобы атрибут класса заселяется, значение было объединение всех значений массива, который был с помощью этого метода:

echo $this->Form->input('input_id', ['options' => $inputArray, 'empty' => true]); 

Вместо этого я сгенерировал HTML вручную:

echo '<label for="input-id">Input</label>'; 
echo '<select id="input-id" name="input_id" required="required">'; 
echo '<option value="" data-attribute=""> </option>'; 

foreach($inputArray as $inputRow){ 
    echo '<option value="'.$inputRow['value'].'" data-attribute="'.$inputRow['data-attribute'].'">'.$inputRow['data'].'</option>'; 
} 

echo '</select>';