Добрался я наконец до написания фильтра по характеристикам товаров.Для того, чтобы получить список всех характеристик товаров, которые находятся в данной категории, сгруппировав их по группам, необходимо изменить контроллер и модель.
Контроллер
Контроллер
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;
}
}
Скажите пожалуйста, в каком именно месте эти коды можно вставить? Или просто в конец можно вставить?
ОтветитьУдалить