отображать данные для каждого n-го данных, используя clistview

Как я могу отобразить данные для каждой, скажем, нечетной записи?
Итак, первая запись 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,
));

}

1

Решение

Есть два способа сделать это; в зависимости от того, насколько сложной должна быть ваша фильтрация;

Первый способ — изменить критерии сравнения, чтобы отфильтровать только нечетные или четные записи, подобные этой.

        $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 элементов в списке или, если это первый / последний элемент
Это полезно для условного рендеринга элементов / добавления классов и т. Д.

0

Другие решения

Других решений пока нет …