public function actionSearch() { $objects = array(); $criteria = new CDbCriteria(); $criteria->alias = 'co'; $criteria->condition = "is_active = 1 AND is_deleted = 0"; $criteria->addCondition("lang_id = " . $this->lang); $criteria->addCondition("category_id = 1"); //@todo - искать в реальной категории if (isset($_REQUEST['data'])) { $data = $_REQUEST['data']; if (is_array($data) && count($data)) { $criteria->join = ""; $i = 0; foreach ($data as $fieldName => $items) { $field = CatalogFilteredFields::model()->findByAttributes(array("category_id" => 1, "name" => $fieldName)); if (is_object($field) && is_array($items) && count($items)) { $cond = '('; $i1 = true; foreach ($items as $item) { if (is_numeric($item)) { if (!$i1) { $cond .= "OR (`fv{$i}`.`field_id` = {$field->id} AND `fv{$i}`.`int_val` = {$item}) "; } else { $cond .= "(`fv{$i}`.`field_id` = {$field->id} AND `fv{$i}`.`int_val` = {$item}) "; $i1 = false; } } } $cond .= ')'; $criteria->join .= "INNER JOIN `catalog_filtered_fields_values` AS `fv{$i}` ON `co`.`id` = `fv{$i}`.`object_id` " . "AND {$cond} "; $i++; } } } } //$criteria->group = "object_id"; if (isset($_REQUEST['min_price']) && isset($_REQUEST['max_price'])) { //$criteria->join = "LEFT JOIN `catalog_objects` ON `catalog_filtered_fields_values`.`object_id` = `catalog_objects`.`id`"; $criteria->addBetweenCondition('price', CatalogObjects::convertPrice($_REQUEST['min_price']), CatalogObjects::convertPrice($_REQUEST['max_price'])); } $count = CatalogObjects::model()->count($criteria); $pages = new CPagination($count); $pages->pageSize = 2; $pages->applyLimit($criteria); $objects = CatalogObjects::model()->findAll($criteria); $this->renderPartial('objects', array('objects' => $objects, 'pages' => $pages)); }
<form action="/catalog/<?php echo $this->currentCategory->url; ?> " name="catalog-filter" id="catalog-filter"></form> <ul class="price_menu"> <?php $min = CatalogObjects::convertPrice(CatalogObjects::getMinPrice($this->currentCategory->id)); $max = CatalogObjects::convertPrice(CatalogObjects::getMaxPrice($this->currentCategory->id)) + 10; $minValue = isset($_REQUEST['min_price']) ? $_REQUEST['min_price'] : ($min < 500 ? $min : 500); $maxValue = isset($_REQUEST['max_price']) ? $_REQUEST['max_price'] : ($max ? $max : 100000); ?> <li> <p><span><?php echo Localization::translate('filter_cost', $this->lang); ?> </span></p> <div class="newForm"> <form action="#" method="post"> <div class="formCost"> <label for="minCost">От</label> <input type="text" id="minCost" name="min_price" value="<?php echo $minValue; ?> " form="catalog-filter" /> <label for="maxCost">до</label> <input type="text" id="maxCost" name="max_price" value="<?php echo $maxValue; ?> " form="catalog-filter" /> </div> <div class="sliderCont"> <div id="slider" data-min="<?php echo $min < 500 ? $min : 500;