@madion

Как поставить фильтр и сортировку на колонку CGridView?

Вечер в хату, многоуважаемые! Прошу помочь с моим вопросом.
В модель product добавлен такой метод - он определяет на сколько процентов заполнены поля в товаре (если добавлена хотя бы одна картинка, то +33.3%, если есть описание, то +33.3%, если добавлены параметры, то +33.3%):
public function getPrcFilling() {
		$result = 0;
		if ( count($this->images) ) { 
			$result += 33.3;
		}
		if ( count($this->params) ) {
			$result += 33.3;
		}
		if ( $this->description != '' ) {
			$result += 33.3;
		}
		return round($result);
	}


а также:

public function relations()
	{
		return array(
			'category' => array(self::BELONGS_TO, 'Category', 'category_id'),
			'StoreProducts' => array(self::HAS_MANY, 'StoreProducts', array('product_id' => 'id')),
			'params' => array(self::HAS_MANY, 'ProductParams', array('product_id' => 'id')),
			'images' => array(self::HAS_MANY, 'ProductImages', array('product_id' => 'id')),
		);
	}


затем добавил колонку в CGridView:

array(
		    'name' => 'prc',
            'header' => '%',
			'value' => '$data->getPrcFilling()',
			'htmlOptions' => array('width' => 10, 'align' => 'center'),
			'filter'=> CHtml::listData(
			                array(
			                    0 => array(
								    'id' => 0,
								    'title'=>'0%',
								),
								1 => array(
								    'id' => 1,
								    'title'=>'34%',
								),
								2 => array(
								    'id' => 2,
								    'title'=>'67%',
								),
								3 => array(
								    'id' => 3,
								    'title'=>'100%',
								),
							), 
							'id',
							'title'
			            ),
		),


Как можно осуществить сортировку и фильтрацию по этой колонке?
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 1
vyachin
@vyachin
Ищу работу
самый хороший вариант это не считать этот процент каждый раз через считывание из базы количества картинок и параметров, а хранить его в отдельном поле у товара. Тогда:
1. сортировка становится простой
2. скорость увеличивается за счет снижения количества запросов к базе
3. фильтрация тоже делается легко
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы