Здравствуйте, ищу решение по допилу стандартного модуля фильтра Opencart 1.5.5.1. Читал темы но там старые ссылки которые уже, увы, не работают. Интересует, в частности, решение по выводу сразу двух значений фильтров по арлгоритму AND, чтобы показывало товары только те в которых есть только оба значения фильтра... Нашел модуль c такими решениями, но он почему то не работает:
Файл 1: catalog/model/catalog/filter.php
<?php
class ModelCatalogFilter extends Model {
public function getFilterGroups($filter_ids) {
$implode = array();
$filters = explode(',', $filter_ids);
foreach ($filters as $filter_id) {
$implode[] = (int)$filter_id;
}
$sql = "SELECT COUNT(DISTINCT f.filter_group_id) AS total FROM `" . DB_PREFIX . "filter` f WHERE f.filter_id IN (" .
implode(',', $implode) . ")";
$query = $this->db->query($sql);
if ($query->row) {
return $query->row['total'];
} else {
return 0;
}
}
}
и файл 2 vqmod/xml/oc_filter_module.xml
<?xml version="1.0" encoding="UTF-8"?>
<modification>
<id><![CDATA[Color module Installation]]></id>
<version><![CDATA[1.1.6]]></version>
<vqmver><![CDATA[2.4.1]]></vqmver>
<author><![CDATA[The Wizard of Osch, for www.CrystalCopy.nl]]></author>
<file name="catalog/model/catalog/product.php" error="abort">
<operation error="abort" info="Adding AND logic for standart opencart filter module">
<search position="after" index="1,2"><![CDATA[$sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)";]]></search>
<add><![CDATA[$sql .= " LEFT JOIN " . DB_PREFIX . "filter f ON (pf.filter_id = f.filter_id)";]]></add>
</operation>
<operation error="abort" info="Adding AND logic for standart opencart filter module">
<search position="after" index="1"><![CDATA[$sql .= " GROUP BY p.product_id";]]></search>
<add><![CDATA[
if (!empty($data['filter_filter'])) {
$this->load->model('catalog/filter');
$filter_group_count = $this->model_catalog_filter->getFilterGroups($data['filter_filter']);
$sql .= " HAVING COUNT(DISTINCT f.filter_group_id) = " . $filter_group_count;
}
]]></add>
</operation>
<operation error="abort" info="Adding AND logic for standart opencart filter module">
<search position="replace" index="1"><![CDATA[$sql = "SELECT COUNT(DISTINCT p.product_id) AS total";]]></search>
<add><![CDATA[
if (!empty($data['filter_filter'])) {
$sql = "SELECT COUNT(*) AS total FROM (SELECT COUNT(DISTINCT p.product_id) AS total";
} else {
$sql = "SELECT COUNT(DISTINCT p.product_id) AS total";
}
]]></add>
</operation>
<operation error="abort" info="Adding AND logic for standart opencart filter module">
<search position="before" index="3"><![CDATA[$query = $this->db->query($sql);]]></search>
<add><![CDATA[
if (!empty($data['filter_filter'])) {
$this->load->model('catalog/filter');
$filter_group_count = $this->model_catalog_filter->getFilterGroups($data['filter_filter']);
$sql .= " GROUP BY p.product_id HAVING COUNT(DISTINCT f.filter_group_id) = '" . $filter_group_count . "') t";
}
]]></add>
</operation>
<operation error="abort" info="Adding AND logic for standart opencart filter module">
<search position="replace" index="1"><![CDATA[return $query->row['total'];]]></search>
<add><![CDATA[
if ($query->row) {
return $query->row['total'];
} else {
return 0;
}
]]></add>
</operation>
</file>
</modification>
Буду благодарен Донатом за помощь и поправки.
Так же смотрел и платные модули, но для решения моих потребностей достаточно такого варианта, так как товаров до 1000 и они однотипные... Заранее благодарен всем кто поможет...