Здравствуйте, у меня такая проблема я вывожу фильтры в карточку товара, все работает нормально - кроме того что фильтр дублируется 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'] ); } }
В условия выбора с БД добавте поле с языком. Но если эти поля(фильтрованые) только в одном языке - то непоможет( PS: но всеравно я непонимаю зачем фильтр в карточке товара! он же для фильтрации товаров! Вывести характеристики можете стандартными средствами ОС - как атрибуты (там мультиязычность встроена) или доп. табы
Спасибо за ответ!! Можно подробнее "В условия выбора с БД добавте поле с языком." Для мой реализации удобно было бы сделать их в виде фильтров :(
Например так PHP: WHERE pf.product_id = ".$this->request->get['product_id']. "' AND pf.language_id = '" . (int)$this->config->get('config_language_id') И у вас должна быть таблица с language_id в таблице фильтрa(в БД)
Она есть тут http://joxi.ru/V2V3GlkSyNqYAv --- Добавлено, 29 мар 2017 --- У меня не получается, как все вместе должно правильно выглядеть? --- Добавлено, 29 мар 2017 --- Добавляю в запрос и получаю ошибки (
1) language_id у вас находится в таблице filter_group_description (fgd), а не в product_filter (pf) как написал я 2) в мой запрос в конец добавить нужно - ." "); 3) Можете попробывать в language_id ='1', может у вас параметр $this->config->get('config_language_id') пустой, и var_dump(); вам в помощ))
Я думал добавить ваш запрос сюда 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'] ); } }
попробовал то что выше, все равно двоится (2 языка) + хотелось бы чтоб value было ссылкой на страницу отфильтрованного товара. Так можно?