Jump to content

Кто реализовывал отдельные фиды по категориям?


Recommended Posts

Есть общий фид яндекса yandex.xml , встал вопрос чтоб разделить фид, чтоб грузить отдельно категории. 

Вариант выборочных товаров отпадает, т.к. нужно 2 и более фидов. 

Кто делал такое? что по цене? чтоб я мог создавать любое количество фидов с выбранными категориями?

Link to post
Share on other sites
19 часов назад, megauser сказал:

а цена?

Могу предложить сделать иначе, грубо говоря фильтр в админке, выбираем категорию или несколько категорий, бренды, статусы и исходя из фильтров формируем новый файл, файлов можно будет создавать сколько угодно. Всё работает на ajax.

По цене от 200$

Link to post
Share on other sites

Простейший вариант:

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

дадут фиды по отдельным категориям.

Link to post
Share on other sites
В 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

дадут фиды по отдельным категориям.

Решение просто идеальное, простое и действенное. 

Еще додумать как сделать чтоб подкатегории включались и супер)

За решение - Спасибо!

Link to post
Share on other sites
8 минут назад, megauser сказал:

Решение просто идеальное, простое и действенное. 

Еще додумать как сделать чтоб подкатегории включались и супер)

За решение - Спасибо!

Передавать ID через запятую и оператор WHERE IN.

Link to post
Share on other sites

Примерно так:

    $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);

Link to post
Share on other sites
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);

Условие лучше переместить выше.

Link to post
Share on other sites
  • 2 weeks later...
В 02.08.2021 в 12:16, Noxter сказал:

Передавать ID через запятую и оператор WHERE IN.

конечно, зачем выбирать дочерние категории запросом когда лучше это переложить на пользователя, верно? :)))

бесплатное решение на то и бесплатное чтобы быть плохим!

Edited by a13x
Link to post
Share on other sites
13 часов назад, a13x сказал:

конечно, зачем выбирать дочерние категории запросом когда лучше это переложить на пользователя, верно? :)))

бесплатное решение на то и бесплатное чтобы быть плохим!

Всё верно. Пусть хоть иногда сами думают)

Link to post
Share on other sites
18 часов назад, a13x сказал:

бесплатное решение на то и бесплатное чтобы быть плохим!

Размер оплаты и качество продукта во многих случаях имеют весьма слабую связь. Особенно когда дело касается сложных технических вопросов (в частности в IT-технологиях)...

На форуме полно примеров, когда спрашивающие весьма довольны данными бесплатными решениями. И наоборот, есть масса случаев, когда спец получил предоплату и тривиально пропал...

 

Link to post
Share on other sites
В 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);

Получается первый вариант работает, а с дочерними категориями не собирает.

 

Link to post
Share on other sites

Пробуйте

	$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).')';

 

Link to post
Share on other sites
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).')';

 

Спасибо огромнейшее!

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...