Aleksiem

Новичок
  • Публикаций

    1
  • Зарегистрирован

  • Посещение

Репутация

1 Обычный

Информация о Aleksiem

  • Звание
    Новичок
  1. Достался модуль по наследству, модуль хорош, работает корректно. У меня возникла проблема, проблема в следующем. В маркете в выгрузке есть тег market_category, который помогает выгрузить товар в правильную категорию маркета, в вашем модуле есть его поддержка, но когда я начал его проставлять, то наткнулся на одну особенность. Если товар отображается в нескольких категориях, то модуль делает сопоставление для тега market_category по произвольной категории (может быть и есть закономерность, но моих знаний программирования не хватило, чтобы её понять :)) Это не всегда справедливо, например у меня в магазине есть категория периферия, куда входят экшн камеры, роутеры и другая периферия (у маркета нет определённой категории для этого, и я поставил что-то типа акссесуары для компьютера. И есть категория экшн-камеры, для которых на маркете есть специальная категория Видеокамеры. Так вот у меня экшнкамерам выгрузка присвоила категорию аксессуары, хотя у них основной категорией указаны экшн-камеры, для которых market_category должен был соотнесен с видеокамерами. Это грозить тем, что товар выгрузится, но не будет выдавать в поиске цен по конкретному товару при поиске на маркете, у меня именно этот эффект и наблюдался, то есть если смотреть выгруженные предложения, то экшн-камера выгрузилась, но если искать её по модели в яндексе и потом смотреть цены, то там моего магазина не было. Можно конечно попинать на кривое название и описание экшн-камеры, но скока не пытался его менять, маркет его не цеплял, market_category очень помог. Собственно сам проблему нашёл, сам и решил, выкладываю решение, может кому пригодится, автору просьба посмотреть на наличие возможных багов и поправить если что, ибо сам в программировании не силён. Я изменил запрос в функции getProduct в файле catalog/model/export/yandex_yml.php Было $query = $this->db->query("SELECT p.*, pd.name, pd.description, pd.meta_description, m.name AS manufacturer, p2c.category_id, IFNULL(ps.price, p.price) AS price, wcd.unit AS weight_unit FROM " . DB_PREFIX . "product p JOIN " . DB_PREFIX . "product_to_category AS p2c ON (p.product_id = p2c.product_id) " . ($vendor_required ? '' : 'LEFT ') . "JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ps.date_start < NOW() AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()) LEFT JOIN " . DB_PREFIX . "weight_class_description wcd ON (p.weight_class_id = wcd.weight_class_id) AND wcd.language_id='" . (int)$this->config->get('config_language_id') . "' WHERE p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'" .($allowed_categories ? " AND p2c.category_id IN (" . $this->db->escape($allowed_categories) . ")" : "") .$sql_blacklist .($allowed_manufacturers ? " AND p.manufacturer_id IN (" . $this->db->escape($allowed_manufacturers) . ")" : "") . " AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1' AND (p.quantity > '0' OR p.stock_status_id != '" . (int)$out_of_stock_id . "') GROUP BY p.product_id ORDER BY product_id"); Стало $query = $this->db->query("SELECT p.*, pd.name, pd.description, pd.meta_description, m.name AS manufacturer, p2c.category_id, IFNULL(ps.price, p.price) AS price, wcd.unit AS weight_unit FROM " . DB_PREFIX . "product p JOIN " . DB_PREFIX . "product_to_category AS p2c ON (p.product_id = p2c.product_id) " . ($vendor_required ? '' : 'LEFT ') . "JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ps.date_start < NOW() AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()) LEFT JOIN " . DB_PREFIX . "weight_class_description wcd ON (p.weight_class_id = wcd.weight_class_id) AND wcd.language_id='" . (int)$this->config->get('config_language_id') . "' WHERE p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'" .($allowed_categories ? " AND p2c.category_id IN (" . $this->db->escape($allowed_categories) . ")" : "") .$sql_blacklist .($allowed_manufacturers ? " AND p.manufacturer_id IN (" . $this->db->escape($allowed_manufacturers) . ")" : "") . " AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p2c.main_category = 1 AND p.status = '1' AND (p.quantity > '0' OR p.stock_status_id != '" . (int)$out_of_stock_id . "') GROUP BY p.product_id ORDER BY product_id"); Собственно изменение ровно в 1 строчку, а именно добавилась строчка AND p2c.main_category = 1 Знаю, что для программистов сия процедура аналогична копанию в песочнице, но для меня она была необходима и нетривиальна, может быть еще кому-то поможет в решение описанной проблемы)