несколько списков активных чеков в yii от одной и той же модели на одной странице - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть страницы с несколькими activeCheckBoxLists, которые фактически генерируются в цикле foreach. Проблема, с которой я столкнулся, заключается в том, что каждый список генерируется с теми же именами и идентификаторами, что и любой другой сгенерированный список. Мне нужен способ отправить итерацию или что-то в идентификаторы и имена, чтобы они были уникальными.

Когда я использую jquery для выбора первого элемента списка, он выбирает первый элемент каждого списка.

Вот код, который генерирует списки.

// collect all filter titles (level == 0, parent == 0)
$topLevelFilterTitles = $hsf->findAllByAttributes(array('level'=>'0','parent_id'=>'0'));
foreach($topLevelFilterTitles as $filterTitle):
  // with each filter title find all children (level == 1, parent == filter title id)
  echo "<div class='half menu split'>";
  echo "<p class='uppercase-text filter-name'>" . $filterTitle->title . "</p>";
  $filterOptions = $hsf->findAllByAttributes(
     array(
    'level'=>'1',
    'parent_id'=>$filterTitle->id,
     )
  );
  $list = CHtml::listData($filterOptions,'filter_name','title');
  echo CHtml::activeCheckBoxList(
     $hsf,  // model
 'filter_name',
 $list
  );
  echo "</div>";
endforeach;

Сгенерированные списки отображаются следующим образом

<div class="halfmenu split">
   <p class="uppercase-text filter-name">Filter Name R</p>
   <input id="ytHardwareSearchFiltering_filter_name" type="hidden" value="" name="HardwareSearchFiltering[filter_name]" />
   <input id="HardwareSearchFiltering_filter_name_0" value="r_value0" type="checkbox" name="HardwareSearchFiltering[filter_name][]" /> 
   <label for="HardwareSearchFiltering_filter_name_0">r_name0</label><br/>
   <input id="HardwareSearchFiltering_filter_name_1" value="r_value1" type="checkbox" name="HardwareSearchFiltering[filter_name][]" />
   <label for="HardwareSearchFiltering_filter_name_1">r_name1</label>
</div>
<div class="halfmenu split">
   <p class="uppercase-text filter-name">Filter Name T</p>
   <input id="ytHardwareSearchFiltering_filter_name" type="hidden" value="" name="HardwareSearchFiltering[filter_name]" />
   <input id="HardwareSearchFiltering_filter_name_0" value="t_value0" type="checkbox" name="HardwareSearchFiltering[filter_name][]" /> 
   <label for="HardwareSearchFiltering_filter_name_0">t_name0</label><br/>
   <input id="HardwareSearchFiltering_filter_name_1" value="t_value1" type="checkbox" name="HardwareSearchFiltering[filter_name][]" />
   <label for="HardwareSearchFiltering_filter_name_1">t_name1</label><br/>
</div>

Мне нужно (желательно), чтобы идентификатор был разным в разных списках, но даже если бы я мог получить другое имя, это было бы началом. Заранее спасибо за помощь.

1 Ответ

2 голосов
/ 09 сентября 2011

Вы можете добавить htmloptions в activeCheckBoxList, как указано в документации API . В вашем случае я считаю, что вы могли бы сделать что-то вроде этого:

echo CHtml::activeCheckBoxList(
    $hsf,  // model
    'filter_name',
    $list, array(
        // Here you could use your filterTitle id or any other
        // variable that will make your checkbox unique
        'id'   => 'chk_'.$filterTitle->id,
        'name' => 'chk_'.$filterTitle->id
    )
);

Htmloptions - это четвертый параметр в экземпляре activeCheckBoxList в виде массива. Посмотрите на API!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...