Как я могу отобразить данные для каждой, скажем, нечетной записи?
Итак, первая запись Z, вторая запись — Y, третья запись — Z, четвертая — Y.
или, допустим, я получаю из модели каждую n-ю запись, а другую — n-1?
public function getNewItem()//for main page grids
{
$criteria = new CDbCriteria;
$criteria->order = 'posted_date DESC';
$criteria->compare('product_status',"Y");
$criteria->compare('product_approval_status',"Y");
//????
return new CActiveDataProvider( $this, array(
'criteria'=>$criteria,
'pagination'=>false,
));
}
Есть два способа сделать это; в зависимости от того, насколько сложной должна быть ваша фильтрация;
Первый способ — изменить критерии сравнения, чтобы отфильтровать только нечетные или четные записи, подобные этой.
$criteria = new CDbCriteria;
$criteria->order = 'posted_date DESC';
$criteria->compare('product_status',"Y");
$criteria->compare('product_approval_status',"Y");
$criteria->addCondition('MOD(id,2)=1','AND');
или любое такое условие, чтобы получить соответствующее подмножество записей
Второй метод — отфильтровать его в частичном файле, который вы используете в CListView
, Я использую этот метод, чтобы обычно добавлять дополнительный код не для фильтрации, например, вы хотите добавить новую строку каждый четвертый элемент, для этого используйте $index
а также $widget
переменная сделана доступной в itemView
атрибут в CListView
позвонить с чем-то вроде этого.
<?php if(($index)%6 == 0 || $index == 0 ){ ?>
<div class="row">
<?php } ?>
// Regular view rendering code
// ...
<?php if(($index+1)%6 == 0 || ($index+1) == $widget->dataProvider->itemCount){ ?>
</div>
<?php }
Здесь я использовал это, чтобы вставить новый div для каждых 6 элементов в списке или, если это первый / последний элемент
Это полезно для условного рендеринга элементов / добавления классов и т. Д.
Других решений пока нет …