Всем привет. Не могу прикрутить к фильтру модуль Product Color Option Сам модуль добавляет в опции после селекта опцию color. Думал фильтр подхватит, но ошибся( Подскажите, пожалуйста, где добавить (и что) нужно, чтобы фильтр фильтровал по цвету?
Фильтр подхватывает атрибуты, а не опции. А что ему фильтровать ...? Есть например 2 цвета - ну так товар может быть и 1-го и другого...
Цвет ему фильтровать логика такая же как и в селекте Он же селект фильтрует (селект-размер тоже может быть и один и другой )
Фильтр фильтрует по атрибутам. Атрибут может иметь только одно значение. Опция - наоборот, когда товар имеет изменяемую характеристику, дает возможность выбрать клиенту какое именно значение этой характеристики ему нужно.
Bogdan, ненужно мне логику работы расказывать. Модуль добавляет к $product_option['type'] == 'select' такой тип $product_option['type'] == 'color' || что нужно дописать чтобы фильтр такой тип понимал? Если Вы незнаете, то незачем в теме расказывать про работу фильтра
Spy, извиняюсь, я по инерции про OCFilter, а топик про Filter Pro .... А в базе проверяли? Модуль точно пишет в таблицу options ? Возможно он создает свою таблицу, например colors и связывающую например product_to_color ... Если так, то только допиливать модель фильтра. Если не сложно сбросьте файлик модели модуля - нужно понять куда он данные по цвету пишет. Хотя заранее на 99% понятно, что не в стандартную таблицу опций, но нужно понять куда
Bogdan, вот код что он пишет в модели католога Код: <file name="catalog/model/catalog/product.php"> <operation error="log"> <search position="replace"><![CDATA[$product_option['type'] == 'select']]></search> <add><![CDATA[$product_option['type'] == 'select' || $product_option['type'] == 'color']]></add> </operation> <operation error="log"> <search position="before"><![CDATA[=> $product_option_value['name'],]]></search> <add><![CDATA[//BOF Product Color Option 'color_code' => $product_option_value['color_code'], //EOF Product Color Option]]></add> </operation> <operation error="log"> <search position="before" offset="1"><![CDATA[?>]]></search> <add><![CDATA[//BOF Product Color Option public function getProductColorOptions($product_id) { $product_color_options = array(); $product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order"); foreach ($product_option_query->rows as $product_option) { if ($product_option['type'] == 'color') { $product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order"); foreach ($product_option_value_query->rows as $product_option_value) { $product_color_options[] = array( 'color_name' => $product_option_value['name'], 'color_code' => $product_option_value['color_code'] ); } return $product_color_options; } } return $product_color_options; } //EOF Product Color Option]]></add> </operation> </file> Я так понимаю что это логику фильтра нужно расширять. Может знаешь, как к опции картинка (сортировка по картинке в фильтре) выводилось название этой опции (в админке называется значение опции)?
Та, блин в том-то и дело, что вроде как в логику фильтра всё укладівается. Модуль всего-лишь в таблице option_values добавляет столбец color_code. Но название цвета сохраняетв стандартном поле этой таблицы name. Ну и присваивает тип опции "color" А фильтр в свою очередь при заборе опций ВООБЩЕ НЕ ПРОВЕРЯЕТ ИХ ТИП. Т.е. каких-то очевидных причин я к сожалению в коде не вижу. Нужно как-то отлаживать, например что получаем от метода getOptions из модели фильтра. Если там будут присутствовать нужные нам записи, значит нужно ковырять getTotalOption. А там же ... матінко рідна ... 12-этажные запросы при подсчете количества ... В первую очередь я бы в контроллере вильтра нашел где он обращается к getOptions, резултат записал бы в лог, и глянул что мы там получили. Ну а дальше - в зависимости от результата. Про картинки не совсем понял ... Они же для того и нужны, если есть желание подавать значения опций картинками, а не текстом.
Просто картинку я сделаю цветом и буду фильтровать по цвету; только нужно чтобы в фильтре еще и название было рядом вот так [картинка]--зеленый (1) [картинка]--красный (20) [картинка]--синий (4) а сейчас только так [картинка] [картинка] [картинка] а как название вытянуть я незнаю(
Ну с этим проще разобраться будет - всего лишь интерфейс ... Сейчас же главное подтянуть цвет. Не пробовали еще в логи записывать результат метода getOptions?
не еще непробывал. Если подписи к картинкам сделать то ненужно будет с color отлаживать и модуль фильтра всего перекапывать
Не совсем понял ... Мы говорим о картинках в фильтре или картинках на странице товара? Подожди, так опции все же подтянулись ...?
только селект и картинки(цвет нет), это мы проехали. вопрос в том, чтобы возле картинки выводилось название этой опции с количеством (как селект- название и количество) --- Добавлено, 3 окт 2013 --- Сам разобрался поправить в категориях/модуль/ фильтрпро.тпл тип image (в конце) Заменить Код: <div class="collapsible" <?php if(!$option['expanded']) { echo 'style="display:none"'; }?>> <?php foreach($option['option_values'] as $option_value) { ?> <input style="display: none;" class="filtered option_value" id="option_value_<?php echo $option_value['option_value_id']?>" type="checkbox" name="option_value[<?php echo $option['option_id']?>][]" value="<?php echo $option_value['option_value_id']?>"> <img src="<?php echo $option_value['thumb'];?>"/> <?php } ?> </div> на Код: <table class="collapsible" <?php if(!$option['expanded']) { echo 'style="display:none"'; }?>> <?php foreach($option['option_values'] as $option_value) { ?> <tr> <td> <input style="display: none;" class="filtered option_value" id="option_value_<?php echo $option_value['option_value_id']?>" type="checkbox" name="option_value[<?php echo $option['option_id']?>][]" value="<?php echo $option_value['option_value_id']?>"> <img src="<?php echo $option_value['thumb'];?>"/> </td> <td> <label for="option_value_<?php echo $option_value['option_value_id']?>"><?php echo $option_value['name']?></label> </td> </tr> <?php } ?> </table> Выглядит так может кому-то пригодится
Найди в файле ....\catalog\controller\module\filterpro.php строку: $this->data['options'] = $this->model_module_filterpro->getOptions($data); (это должна быть 212-я строка) После нее вставь: $this->log->write(print_r($this->data['options'],true)); Зайди на какую-нибудь страничку где есть фильтр и в списке товаров есть товары с опцией "color". А потом глянь в логах (ну и сюда скинь) ту часть где пропишется массив ... Нужно же в конце-концов разобраться, почему он их не подтягивает