Сортировка в CListView

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
feodor
Сообщения: 95
Зарегистрирован: 2013.01.28, 00:02

Сортировка в CListView

Сообщение feodor »

Подскажите как правильно сделать сортировку в CListView,

чтобы вместо такой ссылки:
http://site.ru/catalog/items?Catalog_sort=price

была такая:
http://site.ru/catalog/items

А переменная сортировка передавалась через сессии или куки.
Заранее спасибо.
feodor
Сообщения: 95
Зарегистрирован: 2013.01.28, 00:02

Re: Сортировка в CListView

Сообщение feodor »

Сделал в итоге так:

Перегрузил в CSort метод createLink для вывода вместо обычной ссылки с GET параметром, ajax-ссылку на ajax-экшн (actionSort). Экшн записывает параметр сортировки в куку (метод добавил соответственно в контроллер) и в конце страница обновляется.

А в метод getDirections добавил присвоение $_GET[$this->sortVar] = Catalog::getSort(), чтобы взять значение из куки и запустить в работу. Catalog::getSort() - возвращает значение из куки.

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

class Sort extends CSort
{
    protected function createLink($attribute, $label, $url, $htmlOptions)
	{
		$sort = substr($url, strpos($url, '=') + 1);
		$ajaxOptions = [
			'data' => ['sort' => $sort],
			'type' => 'POST',
			'success' => 'location.reload()',
		];
		return CHtml::ajaxLink($label, '/catalog/sort', $ajaxOptions, $htmlOptions);
	}

    public function getDirections()
    {
        if(!isset($_GET[$this->sortVar]))
            $_GET[$this->sortVar] = Catalog::getSort();
        return parent::getDirections();
    }
}
Ответить