[Помогите] Вывод фильтров в карточку товаров

Тема в разделе "OpenCart", создана пользователем kindly, 29 мар 2017.

  1. kindly

    kindly

    Регистрация:
    19 ноя 2012
    Сообщения:
    65
    Симпатии:
    8
    Здравствуйте, у меня такая проблема я вывожу фильтры в карточку товара, все работает нормально - кроме того что фильтр дублируется 4 раза да еще и на разных языках!
    (на сайте их установлено 4) и в итоге я ловню 16 дублей помогите решить проблему!
    http://joxi.ru/vAWOV51FwaK5AW

    tpl
    Код:
    <tr><td><span><?php echo $text_stock; ?></span></td><td class="description-right"><?php echo $stock; ?></td></tr>
                            <?php if ($attributes_from_filter) { ?>
                        <?php foreach ($attributes_from_filter as $attr) { ?>
                      <tr><td><span><?php echo $attr['name']; ?>:</span></td><td class="description-right"> <?php echo $attr['value']; ?> </td></tr>
                        <?php } ?>
                        <?php } ?>
    
    controller
    Код:
    // Get filter name: value
                
                $q = $this->db->query("SELECT pf.product_id, fgd.name as name_param, fd.name as name_value FROM `".DB_PREFIX."product_filter` pf
                LEFT JOIN `".DB_PREFIX."filter` f ON (f.filter_id = pf.filter_id)
                LEFT JOIN `".DB_PREFIX."filter_description` fd ON (fd.filter_id = pf.filter_id)
                LEFT JOIN `".DB_PREFIX."filter_group_description` fgd ON (fgd.filter_group_id = fd.filter_group_id) WHERE pf.product_id = ".$this->request->get['product_id']." ");
                
                $data['attributes_from_filter'] = array();
    //            print_r ($q->rows); exit;
                if ($q->rows) {
                    foreach ($q->rows as $row) {
                        $data['attributes_from_filter'][] = array(
                        'name' => $row['name_param'],
                        'value' => $row['name_value']
                        );
                    }
                }
     
  2. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    В условия выбора с БД добавте поле с языком. Но если эти поля(фильтрованые) только в одном языке - то непоможет(
    PS: но всеравно я непонимаю зачем фильтр в карточке товара! он же для фильтрации товаров!:Unknown:
    Вывести характеристики можете стандартными средствами ОС - как атрибуты (там мультиязычность встроена) или доп. табы
     
    mr.zefer и kindly нравится это.
  3. kindly

    kindly

    Регистрация:
    19 ноя 2012
    Сообщения:
    65
    Симпатии:
    8
    Спасибо за ответ!! :Smile: Можно подробнее "В условия выбора с БД добавте поле с языком."

    Для мой реализации удобно было бы сделать их в виде фильтров :(
     
  4. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    Например так
    PHP:
    WHERE pf.product_id ".$this->request->get['product_id']. "' AND pf.language_id = '" . (int)$this->config->get('config_language_id')
    И у вас должна быть таблица с language_id в таблице фильтрa(в БД)
     
    kindly нравится это.
  5. kindly

    kindly

    Регистрация:
    19 ноя 2012
    Сообщения:
    65
    Симпатии:
    8
    Она есть тут http://joxi.ru/V2V3GlkSyNqYAv
    --- Добавлено, 29 мар 2017 ---
    У меня не получается, как все вместе должно правильно выглядеть?
    --- Добавлено, 29 мар 2017 ---
    Добавляю в запрос и получаю ошибки (
     
  6. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    1) language_id у вас находится в таблице filter_group_description (fgd), а не в product_filter (pf) как написал я
    2) в мой запрос в конец добавить нужно - ." ");
    3) Можете попробывать в language_id ='1', может у вас параметр $this->config->get('config_language_id') пустой,
    и var_dump(); вам в помощ))
     
    kindly нравится это.
  7. kindly

    kindly

    Регистрация:
    19 ноя 2012
    Сообщения:
    65
    Симпатии:
    8
    Я думал добавить ваш запрос сюда
    LEFT JOIN `".DB_PREFIX."filter_group_description` fgd ON (fgd.filter_group_id = fd.filter_group_id) WHERE pf.product_id = ".$this->request->get['product_id']." ");
    --- Добавлено, 29 мар 2017 ---
    Спасибо Вам Spy

    Код:
    $this->load->model('catalog/review');
                            // Get filter name: value
                
                $q = $this->db->query("SELECT pf.product_id, fgd.name as name_param, fd.name as name_value FROM `".DB_PREFIX."product_filter` pf
                LEFT JOIN `".DB_PREFIX."filter` f ON (f.filter_id = pf.filter_id)
                LEFT JOIN `".DB_PREFIX."filter_description` fd ON (fd.filter_id = pf.filter_id)
                LEFT JOIN `".DB_PREFIX."filter_group_description` fgd ON (fgd.filter_group_id = fd.filter_group_id) WHERE pf.product_id = ".$this->request->get['product_id']. " AND fgd.language_id= " . (int)$this->config->get('config_language_id')." ");
                
    
                
                $data['attributes_from_filter'] = array();
    //            print_r ($q->rows); exit;
                if ($q->rows) {
                    foreach ($q->rows as $row) {
                        $data['attributes_from_filter'][] = array(
                        'name' => $row['name_param'],
                        'value' => $row['name_value']
                        );
                    }
                }
     
  8. ramzes

    ramzes

    Регистрация:
    26 дек 2013
    Сообщения:
    8
    Симпатии:
    0
    попробовал то что выше, все равно двоится (2 языка) + хотелось бы чтоб value было ссылкой на страницу отфильтрованного товара. Так можно?