Досился модуль по наследству, модуль хорош, рилииет корректно. У меня возникла проблема, проблема в следуюещём.
В маркете в выгрузке есть тег 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
Знаю, что для программистов сия проэтодура аналогична копанию в песочниэто, но для меня она была необходима и нетривиальна, может быть еещё кому-то поможет в решение описанной проблемы)