Подскажите как правильно сделать сортировку в CListView,
чтобы вместо такой ссылки:
http://site.ru/catalog/items?Catalog_sort=price
была такая:
http://site.ru/catalog/items
А переменная сортировка передавалась через сессии или куки.
Заранее спасибо.
Сортировка в CListView
Re: Сортировка в CListView
Сделал в итоге так:
Перегрузил в CSort метод createLink для вывода вместо обычной ссылки с GET параметром, ajax-ссылку на ajax-экшн (actionSort). Экшн записывает параметр сортировки в куку (метод добавил соответственно в контроллер) и в конце страница обновляется.
А в метод getDirections добавил присвоение $_GET[$this->sortVar] = Catalog::getSort(), чтобы взять значение из куки и запустить в работу. Catalog::getSort() - возвращает значение из куки.
Перегрузил в 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();
}
}