[Помогите] FilterPro добавить опцию

Тема в разделе "OpenCart", создана пользователем spy, 2 окт 2013.

  1. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    Всем привет.
    Не могу прикрутить к фильтру модуль Product Color Option
    Сам модуль добавляет в опции после селекта опцию color.
    Думал фильтр подхватит, но ошибся(
    Подскажите, пожалуйста, где добавить (и что) нужно, чтобы фильтр фильтровал по цвету?
     
  2. Bogdan

    Bogdan

    Регистрация:
    25 фев 2013
    Сообщения:
    228
    Симпатии:
    104
    Фильтр подхватывает атрибуты, а не опции.
    А что ему фильтровать ...? Есть например 2 цвета - ну так товар может быть и 1-го и другого...
     
  3. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    Цвет ему фильтровать логика такая же как и в селекте
    Он же селект фильтрует (селект-размер тоже может быть и один и другой )
     
  4. Bogdan

    Bogdan

    Регистрация:
    25 фев 2013
    Сообщения:
    228
    Симпатии:
    104
    Фильтр фильтрует по атрибутам. Атрибут может иметь только одно значение. Опция - наоборот, когда товар имеет изменяемую характеристику, дает возможность выбрать клиенту какое именно значение этой характеристики ему нужно.
     
  5. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    Bogdan, ненужно мне логику работы расказывать.
    Модуль добавляет к $product_option['type'] == 'select' такой тип $product_option['type'] == 'color' ||
    что нужно дописать чтобы фильтр такой тип понимал?
    Если Вы незнаете, то незачем в теме расказывать про работу фильтра
     
  6. Bogdan

    Bogdan

    Регистрация:
    25 фев 2013
    Сообщения:
    228
    Симпатии:
    104
    Spy, извиняюсь, я по инерции про OCFilter, а топик про Filter Pro ....
    А в базе проверяли? Модуль точно пишет в таблицу options ?
    Возможно он создает свою таблицу, например colors и связывающую например product_to_color ... Если так, то только допиливать модель фильтра.
    Если не сложно сбросьте файлик модели модуля - нужно понять куда он данные по цвету пишет. Хотя заранее на 99% понятно, что не в стандартную таблицу опций, но нужно понять куда
     
    Последнее редактирование: 2 окт 2013
  7. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    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>
    Я так понимаю что это логику фильтра нужно расширять.
    Может знаешь, как к опции картинка (сортировка по картинке в фильтре) выводилось название этой опции (в админке называется значение опции)?
     
  8. Bogdan

    Bogdan

    Регистрация:
    25 фев 2013
    Сообщения:
    228
    Симпатии:
    104
    Та, блин в том-то и дело, что вроде как в логику фильтра всё укладівается. Модуль всего-лишь в таблице option_values добавляет столбец color_code. Но название цвета сохраняетв стандартном поле этой таблицы name. Ну и присваивает тип опции "color"
    А фильтр в свою очередь при заборе опций ВООБЩЕ НЕ ПРОВЕРЯЕТ ИХ ТИП. Т.е. каких-то очевидных причин я к сожалению в коде не вижу. Нужно как-то отлаживать, например что получаем от метода getOptions из модели фильтра. Если там будут присутствовать нужные нам записи, значит нужно ковырять getTotalOption. А там же ... матінко рідна ... 12-этажные запросы при подсчете количества ...
    В первую очередь я бы в контроллере вильтра нашел где он обращается к getOptions, резултат записал бы в лог, и глянул что мы там получили. Ну а дальше - в зависимости от результата.

    Про картинки не совсем понял ... Они же для того и нужны, если есть желание подавать значения опций картинками, а не текстом.
     
    Последнее редактирование: 2 окт 2013
  9. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    Просто картинку я сделаю цветом и буду фильтровать по цвету; только нужно чтобы в фильтре еще и название было рядом
    вот так
    [картинка]--зеленый (1)
    [картинка]--красный (20)
    [картинка]--синий (4)
    а сейчас только так
    [картинка]
    [картинка]
    [картинка]
    а как название вытянуть я незнаю(
     
  10. Bogdan

    Bogdan

    Регистрация:
    25 фев 2013
    Сообщения:
    228
    Симпатии:
    104
    Ну с этим проще разобраться будет - всего лишь интерфейс ...
    Сейчас же главное подтянуть цвет.
    Не пробовали еще в логи записывать результат метода getOptions?
     
  11. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    не еще непробывал.
    Если подписи к картинкам сделать то ненужно будет с color отлаживать и модуль фильтра всего перекапывать
     
  12. Bogdan

    Bogdan

    Регистрация:
    25 фев 2013
    Сообщения:
    228
    Симпатии:
    104
    Не совсем понял ...
    Мы говорим о картинках в фильтре или картинках на странице товара?
     
  13. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    Про картинку в фильтре
    [​IMG]
     
  14. Bogdan

    Bogdan

    Регистрация:
    25 фев 2013
    Сообщения:
    228
    Симпатии:
    104
    Не совсем понял ...
    Мы говорим о картинках в фильтре или картинках на странице товара?
    Подожди, так опции все же подтянулись ...?
     
  15. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    только селект и картинки(цвет нет), это мы проехали.
    вопрос в том, чтобы возле картинки выводилось название этой опции с количеством (как селект- название и количество)
    --- Добавлено, 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>
    Выглядит так [​IMG]
    может кому-то пригодится
     
    Последнее редактирование: 3 окт 2013
    Love-world нравится это.
  16. Bogdan

    Bogdan

    Регистрация:
    25 фев 2013
    Сообщения:
    228
    Симпатии:
    104
    Найди в файле ....\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". А потом глянь в логах (ну и сюда скинь) ту часть где пропишется массив ...

    Нужно же в конце-концов разобраться, почему он их не подтягивает