Добрался я наконец до написания фильтра по характеристикам товаров.Для того, чтобы получить список всех характеристик товаров, которые находятся в данной категории, сгруппировав их по группам, необходимо изменить контроллер и модель.
Контроллер
Контроллер
catalog/controller/product/category.php
:
//Array of attributes grouped by Attribute Group $group_attributes = $this->model_catalog_category->getCategoryAttrNames($category_id, 'a.attribute_id'); $attributes = $this->model_catalog_category->getCategoryAttrNames($category_id, 'pa.text'); $this->data['min_max_price'] = $this->model_catalog_category->getMinMaxPrice($category_id); for ($i = 0; $i < count($group_attributes); $i++) { $this->data['attributes'][] = array( 'option' => $attributes[$i]['name'], 'attribute_id' => $group_attributes[$i]['attribute_id'] ); foreach ($attributes as $attribute) { if ($option['name'] == $group_attributes[$i]['name']) { $this->data['attributes'][$i]['value'][] = array( 'value' => $attribute['text'] ); } } } //Array of attributes grouped by Attribute GroupМодель
catalog/model/catalog/category.php
:
public function getCategoryAttrNames($category_id, $group_by) { $attr_names = $this->db->query("" . "SELECT DISTINCT pa.text, a.attribute_id, ad.name, pa.product_id, p2c.category_id " . "FROM " . DB_PREFIX . "product_attribute pa " . "LEFT JOIN " . DB_PREFIX . "attribute a " . "ON (pa.attribute_id = a.attribute_id) " . "LEFT JOIN " . DB_PREFIX . "product_to_category p2c " . "ON (pa.product_id = p2c.product_id) " . "LEFT JOIN " . DB_PREFIX . "attribute_description ad " . "ON (a.attribute_id = ad.attribute_id) " . "WHERE ad.language_id = '1' " . "AND p2c.category_id = '" . (int) $category_id . "' " . "AND pa.language_id = '1' " . "GROUP BY " . $group_by . " " . "ORDER BY pa.text "); if ($attr_names->num_rows) { return $attr_names->rows; } }
Скажите пожалуйста, в каком именно месте эти коды можно вставить? Или просто в конец можно вставить?
ОтветитьУдалить