megauser Posted July 28, 2021 Report Share Posted July 28, 2021 Есть общий фид яндекса yandex.xml , встал вопрос чтоб разделить фид, чтоб грузить отдельно категории. Вариант выборочных товаров отпадает, т.к. нужно 2 и более фидов. Кто делал такое? что по цене? чтоб я мог создавать любое количество фидов с выбранными категориями? Quote Link to post Share on other sites
Noxter Posted July 28, 2021 Report Share Posted July 28, 2021 Можно сделать всё! Quote Link to post Share on other sites
megauser Posted July 28, 2021 Author Report Share Posted July 28, 2021 15 минут назад, Noxter сказал: Можно сделать всё! а цена? Quote Link to post Share on other sites
Noxter Posted July 29, 2021 Report Share Posted July 29, 2021 19 часов назад, megauser сказал: а цена? Могу предложить сделать иначе, грубо говоря фильтр в админке, выбираем категорию или несколько категорий, бренды, статусы и исходя из фильтров формируем новый файл, файлов можно будет создавать сколько угодно. Всё работает на ajax. По цене от 200$ Quote Link to post Share on other sites
phukortsin Posted July 30, 2021 Report Share Posted July 30, 2021 Простейший вариант: 1. В yandex.php заменить основной запрос $simpla->db->query("SELECT v.price, v.id as variant_id, p.name as product_name, v.name as variant_name, v.position as variant_position, p.id as product_id, p.url, p.annotation, pc.category_id, i.filename as image FROM __variants v LEFT JOIN __products p ON v.product_id=p.id LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1) LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1) WHERE p.visible AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id ORDER BY p.id, v.position "); на $cat_filter = isset($_REQUEST['cid']) ? ' AND pc.category_id='.intval($_REQUEST['cid']) : ''; $simpla->db->query("SELECT v.price, v.id as variant_id, p.name as product_name, v.name as variant_name, v.position as variant_position, p.id as product_id, p.url, p.annotation, pc.category_id, i.filename as image FROM __variants v LEFT JOIN __products p ON v.product_id=p.id LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1) LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1) WHERE p.visible AND (v.stock >0 OR v.stock is NULL) $cat_filter GROUP BY v.id ORDER BY p.id, v.position "); 2. Адреса вида https://domain.com/yandex.php?cid=3 https://domain.com/yandex.php?cid=5 дадут фиды по отдельным категориям. Quote Link to post Share on other sites
Noxter Posted August 2, 2021 Report Share Posted August 2, 2021 Поверить не могу, корч помогает бесплатно... Quote Link to post Share on other sites
megauser Posted August 2, 2021 Author Report Share Posted August 2, 2021 В 30.07.2021 в 10:13, phukortsin сказал: Простейший вариант: 1. В yandex.php заменить основной запрос $simpla->db->query("SELECT v.price, v.id as variant_id, p.name as product_name, v.name as variant_name, v.position as variant_position, p.id as product_id, p.url, p.annotation, pc.category_id, i.filename as image FROM __variants v LEFT JOIN __products p ON v.product_id=p.id LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1) LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1) WHERE p.visible AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id ORDER BY p.id, v.position "); на $cat_filter = isset($_REQUEST['cid']) ? ' AND pc.category_id='.intval($_REQUEST['cid']) : ''; $simpla->db->query("SELECT v.price, v.id as variant_id, p.name as product_name, v.name as variant_name, v.position as variant_position, p.id as product_id, p.url, p.annotation, pc.category_id, i.filename as image FROM __variants v LEFT JOIN __products p ON v.product_id=p.id LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1) LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1) WHERE p.visible AND (v.stock >0 OR v.stock is NULL) $cat_filter GROUP BY v.id ORDER BY p.id, v.position "); 2. Адреса вида https://domain.com/yandex.php?cid=3 https://domain.com/yandex.php?cid=5 дадут фиды по отдельным категориям. Решение просто идеальное, простое и действенное. Еще додумать как сделать чтоб подкатегории включались и супер) За решение - Спасибо! Quote Link to post Share on other sites
Noxter Posted August 2, 2021 Report Share Posted August 2, 2021 8 минут назад, megauser сказал: Решение просто идеальное, простое и действенное. Еще додумать как сделать чтоб подкатегории включались и супер) За решение - Спасибо! Передавать ID через запятую и оператор WHERE IN. Quote Link to post Share on other sites
phukortsin Posted August 2, 2021 Report Share Posted August 2, 2021 Примерно так: $cat_filter = ''; $category_id = $simpla->request->get('cid', 'integer'); if($category_id && $category = $simpla->categories->get_category($category_id)) $cat_filter = ' AND pc.category_id IN '.join(',', $category->children); Quote Link to post Share on other sites
Noxter Posted August 2, 2021 Report Share Posted August 2, 2021 1 час назад, phukortsin сказал: Примерно так: $cat_filter = ''; $category_id = $simpla->request->get('cid', 'integer'); if($category_id && $category = $simpla->categories->get_category($category_id)) $cat_filter = ' AND pc.category_id IN '.join(',', $category->children); Условие лучше переместить выше. Quote Link to post Share on other sites
a13x Posted August 10, 2021 Report Share Posted August 10, 2021 (edited) В 02.08.2021 в 12:16, Noxter сказал: Передавать ID через запятую и оператор WHERE IN. конечно, зачем выбирать дочерние категории запросом когда лучше это переложить на пользователя, верно? :))) бесплатное решение на то и бесплатное чтобы быть плохим! Edited August 10, 2021 by a13x Quote Link to post Share on other sites
Noxter Posted August 11, 2021 Report Share Posted August 11, 2021 13 часов назад, a13x сказал: конечно, зачем выбирать дочерние категории запросом когда лучше это переложить на пользователя, верно? :))) бесплатное решение на то и бесплатное чтобы быть плохим! Всё верно. Пусть хоть иногда сами думают) Quote Link to post Share on other sites
phukortsin Posted August 11, 2021 Report Share Posted August 11, 2021 18 часов назад, a13x сказал: бесплатное решение на то и бесплатное чтобы быть плохим! Размер оплаты и качество продукта во многих случаях имеют весьма слабую связь. Особенно когда дело касается сложных технических вопросов (в частности в IT-технологиях)... На форуме полно примеров, когда спрашивающие весьма довольны данными бесплатными решениями. И наоборот, есть масса случаев, когда спец получил предоплату и тривиально пропал... Quote Link to post Share on other sites
megauser Posted August 14, 2021 Author Report Share Posted August 14, 2021 В 02.08.2021 в 15:37, phukortsin сказал: Примерно так: $cat_filter = ''; $category_id = $simpla->request->get('cid', 'integer'); if($category_id && $category = $simpla->categories->get_category($category_id)) $cat_filter = ' AND pc.category_id IN '.join(',', $category->children); Получается первый вариант работает, а с дочерними категориями не собирает. Quote Link to post Share on other sites
phukortsin Posted August 14, 2021 Report Share Posted August 14, 2021 Пробуйте $cat_filter = ''; $category_id = $simpla->request->get('cid', 'integer'); if($category_id && $category = $simpla->categories->get_category($category_id)) $cat_filter = ' AND pc.category_id IN ('.join(',', $category->children).')'; Quote Link to post Share on other sites
megauser Posted August 14, 2021 Author Report Share Posted August 14, 2021 4 часа назад, phukortsin сказал: Пробуйте $cat_filter = ''; $category_id = $simpla->request->get('cid', 'integer'); if($category_id && $category = $simpla->categories->get_category($category_id)) $cat_filter = ' AND pc.category_id IN ('.join(',', $category->children).')'; Спасибо огромнейшее! Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.