Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
19 часов назад, megauser сказал:

а цена?

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

По цене от 200$

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
В 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

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
8 минут назад, megauser сказал:

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты
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);

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...
В 02.08.2021 в 12:16, Noxter сказал:

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

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

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

Изменено пользователем a13x
Ссылка на сообщение
Поделиться на другие сайты
13 часов назад, a13x сказал:

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
18 часов назад, a13x сказал:

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

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

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

 

Ссылка на сообщение
Поделиться на другие сайты
В 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);

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

 

Ссылка на сообщение
Поделиться на другие сайты

Пробуйте

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

 

Ссылка на сообщение
Поделиться на другие сайты
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).')';

 

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

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...