Hi Everyone
I took this code from here, it sohws how to filter products with ajax requests, using check-boxes.
The view
echo CHtml::beginForm(CHtml::normalizeUrl(array('message/index')), 'get', array('id'=>'filter-form', 'style'=>'display:inline'));
echo CHtml::checkBoxList('products', (isset($_GET['products'])) ? $_GET['products'] : '', CHtml::listData(Category::model()->with('products')->findAll('t.ParentID = 1 AND products.CategoryID = t.ID'), 'ID', 'Name'),
array( 'class'=>'productsFilter'));
echo CHtml::endForm();
Also in view
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'sortableAttributes'=>array(
'id'=>'cronologico',
'transaction'
),
'id'=>'ajaxListView',
));
?>
<?php
Yii::app()->clientScript->registerScript('search',
"var ajaxUpdateTimeout;
var ajaxRequest;
$('.productsFilter').change(function(){
products = $('.productsFilter').serialize();
$.fn.yiiListView.update(
'ajaxListView',
{data: products}
);
});"
);
Controller
public function actionIndex( array $products = array())
{
$criteria = new CDbCriteria();
if( count( $products ) > 0 )
$criteria->addInCondition( 'CategoryID', $products );
$dataProvider = new CActiveDataProvider( 'Products', array( 'criteria' => $criteria,
'Pagination' => array (
'PageSize' => 12 //edit your number items per page here
),
));
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
This code works fine.
I want to add another checkbox list, that does the same thing with a different condition. Every solution I tried hasn’t worked.
Below is what I tried
Controller
public function actionIndex( array $products = array(), array $products1 = array())
{
$criteria = new CDbCriteria();
if( count( $products ) > 0 )
$criteria->addInCondition( 'CategoryID', $products );
if( count( $products1 ) > 0 )
$criteria->addInCondition( 'CategoryID', $products1 );
$dataProvider = new CActiveDataProvider( 'Products', array( 'criteria' => $criteria,
'Pagination' => array (
'PageSize' =>
),
));
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
View
echo CHtml::beginForm(CHtml::normalizeUrl(array('message/index')), 'get', array('id'=>'filter-form', 'style'=>'display:inline'));
echo CHtml::checkBoxList('products', (isset($_GET['products'])) ? $_GET['products'] : '', CHtml::listData(Category::model()->with('products')->findAll('t.ParentID = 1 AND products.CategoryID = t.ID'), 'ID', 'Name'),
array( 'class'=>'productsFilter'));
echo CHtml::checkBoxList('products1', (isset($_GET['products1'])) ? $_GET['products1'] : '', CHtml::listData(Category::model()->with('products')->findAll('t.ParentID = 6 AND products.CategoryID = t.ID'), 'ID', 'Name'),
array( 'class'=>'productsFilter'));
echo CHtml::endForm();
and
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'sortableAttributes'=>array(
'id'=>'cronologico',
'transaction'
),
'id'=>'ajaxListView',
));
?>
<?php
Yii::app()->clientScript->registerScript('search',
"var ajaxUpdateTimeout;
var ajaxRequest;
$('.productsFilter').change(function(){
products = $('.productsFilter').serialize();
$.fn.yiiListView.update(
'ajaxListView',
{data: products}
);
});
$('.productsFilter1').change(function(){
products1 = $('.productsFilter1').serialize();
$.fn.yiiListView.update(
'ajaxListView',
{data: products1}
);
});"
);
The above code works for the first time I click on filter but after that everything results in no products found.
So what I need is, 2 checkbox lists on the same page, filtering the same ListView.
Thanks in advanced
Regards