Как в CListView сохранить $index не изменным

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Ivan Ozercov
Сообщения: 53
Зарегистрирован: 2012.03.21, 15:53
Откуда: Минск

Как в CListView сохранить $index не изменным

Сообщение Ivan Ozercov »

Мне надо, что бы значение $index не изменялось при сортировке. Выводится список пронумерованный , и мне надо , что бы сортировка осуществлялась например по имени но при этом $index оставался прежнем. Можно ли это сделать ?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Как в CListView сохранить $index не изменным

Сообщение rak »

нельзя.

Код: Выделить всё

//CListView
foreach($data as $i=>$item)
            {
                $data=$this->viewData;
                $data['index']=$i;
                $data['data']=$item;
                $data['widget']=$this;
                $owner->$render($this->itemView,$data);
                if($j++ < $n-1)
                    echo $this->separator;
            }
Аватара пользователя
Ivan Ozercov
Сообщения: 53
Зарегистрирован: 2012.03.21, 15:53
Откуда: Минск

Re: Как в CListView сохранить $index не изменным

Сообщение Ivan Ozercov »

спасибо, но это не то. Поразмыслив пришел к тому что навереное надо получить порядковый номер строки в выборке (средствами Mysql), а потом его уже выводить как порядковый номер. Пока работает не много не так, как надо .
сейчас выполняю такой запрос

Код: Выделить всё

SELECT t.name,@n:=@n+1 AS rownum, IFNULL(SUM(r.mark)/COUNT(r.id),0) AS ratingByReview
FROM (select @n:=0) as num,`business`as  `t`
LEFT JOIN review r ON r.business_id = t.id 
WHERE t.subcategory_id="4"AND site_id="2" 
GROUP BY t.id
ORDER BY ratingByReview DESC
LIMIT 8

Вопрос как сделать так, что бы нумерция строк была после того, как произошла сортировка по RatingBYReview.
Вложения
тут видно что нумерация произошла строк толкь не так как надо
тут видно что нумерация произошла строк толкь не так как надо
index.png (10.13 КБ) 1661 просмотр
Аватара пользователя
Ivan Ozercov
Сообщения: 53
Зарегистрирован: 2012.03.21, 15:53
Откуда: Минск

Re: Как в CListView сохранить $index не изменным

Сообщение Ivan Ozercov »

Решил это пока с помощью костыля, во вьюшке

Код: Выделить всё


$site_id=Site::current()->id;
$pos = Yii::app()->db->createCommand()
    ->select('pos.Position')
    ->from("(SELECT v.*, @n:=@n+1 AS Position
                from(SELECT t.id,
                (SELECT COUNT( v.id )
                FROM vote AS v, contest AS c
                WHERE v.business_id = t.id AND c.contest_id = ( SELECT MAX( contest_id ) FROM contest WHERE site_id = t.site_id ) AND v.time BETWEEN c.contest_start AND c.contest_end )AS voteRating
                FROM `business`as  `t`
                WHERE t.subcategory_id= $subcategory->id AND site_id=$site_id
                GROUP BY t.id
                ORDER BY voteRating DESC) as v,(select @n:=0) as num) as pos")
    ->where('id=:id',array(':id'=>$data->id))
    ->queryRow();
echo '<div class="sequence">';
echo $pos['Position'];
echo '</div>';

Буду очень признателен если, кто нибудь подскажет более изящное решение
Ответить