22 мая 2015 г.

Список атрибутов и их значений в категории

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

Место для рекламы

1 комментарий:

  1. Скажите пожалуйста, в каком именно месте эти коды можно вставить? Или просто в конец можно вставить?

    ОтветитьУдалить