Jump to content

Как сделать два разных .xml файла для Яндекс Вебмастер (товары и предложения, турбо-страницы для магазина)?


Recommended Posts

Здравствуйте.

Нужна ваша помощь, никак не могу сообразить. Simpla 2.3.8 лицензия. Для "Яндекс вебмастер" нужно сделать 2 файла с выгрузкой товаров в .xml через yandex.php.

1. Со всеми товарами размещёнными на сайте (их порядка 3 000) для раздела "товары и предложения".

2. С избранными товарами, которые в наличии в магазине для раздела "Яндекс турбо-страницы для магазина".

Проблему со вторым пунктом я решил, поставил модуль с выгрузкой в я.маркет, все работает, выгружаются только нужные мне товары (сайт/yandex.php). А вот со вторым пунктом я ничего не могу сделать, не знаю, как создать второй фид, чтобы в нём были ВСЕ товары сайта. Да, я скопировал файл yandex.php и переименовал его, он доступен по другому адресу (сайт/convead.php)., добавил в .htaccess.

# XML
RewriteRule ^yandex.xml?$    yandex.php  [L,QSA]
RewriteRule ^convead.xml?$    convead.php  [L,QSA]

Логично, он выдает только товары, которые отмечены в админке для выгрузки. Как сделать, чтобы в этом .xml файле были все товары размещённые на сайте?

Подскажите, пожалуйста. Я плохо во всём этом соображаю, но всегда всё делаю сам, гуглю, читаю, спрашиваю))))

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

Это зависит от того, как выделены товары для выгрузки

Без кода файла - никто ничем не поможет

Сделал всё по данной схеме.

https://drewy.ru/en/blog/simplayandex

 

Код файла yandex.php

<?php

require_once('api/Simpla.php');
$simpla = new Simpla();

header("Content-type: text/xml; charset=UTF-8");
print (pack('CCC', 0xef, 0xbb, 0xbf));
// Заголовок
print
"<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE yml_catalog SYSTEM 'shops.dtd'>
<yml_catalog date='".date('Y-m-d H:i')."'>
<shop>
<name>".$simpla->settings->site_name."</name>
<company>".$simpla->settings->company_name."</company>
<url>".$simpla->config->root_url."</url>
";

// Валюты
$currencies = $simpla->money->get_currencies(array('enabled'=>1));
$main_currency = reset($currencies);
print "<currencies>
";
foreach($currencies as $c)
if($c->enabled)
print "<currency id='".$c->code."' rate='".$c->rate_to/$c->rate_from*$main_currency->rate_from/$main_currency->rate_to."'/>
";
print "</currencies>
";


// Категории
$categories = $simpla->categories->get_categories();
print "<categories>
";
foreach($categories as $c)
{
print "<category id='$c->id'";
if($c->parent_id>0)
	print " parentId='$c->parent_id'";
print ">".htmlspecialchars($c->name)."</category>
";
}
print "</categories>
";

// Товары
$simpla->db->query("SET SQL_BIG_SELECTS=1");
// Товары
$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 p.to_yandex AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id ORDER BY p.id, v.position ");
print "<offers>
";
 

$currency_code = reset($currencies)->code;

// В цикле мы используем не results(), a result(), то есть выбираем из базы товары по одному,
// так они нам одновременно не нужны - мы всё равно сразу же отправляем товар на вывод.
// Таким образом используется памяти только под один товар
$prev_product_id = null;
while($p = $simpla->db->result())
{
$variant_url = '';
if ($prev_product_id === $p->product_id)
	$variant_url = '?variant='.$p->variant_id;
$prev_product_id = $p->product_id;

$price = round($simpla->money->convert($p->price, $main_currency->id, false),2);
print
"
<offer id='$p->variant_id' available='true'>
<url>".$simpla->config->root_url.'/products/'.$p->url.$variant_url."</url>";
print "
<price>$price</price>
<currencyId>".$currency_code."</currencyId>
<categoryId>".$p->category_id."</categoryId>
";

if($p->image)
print "<picture>".$simpla->design->resize_modifier($p->image, 200, 200)."</picture>
";







print "<name>".htmlspecialchars($p->product_name).($p->variant_name?' '.htmlspecialchars($p->variant_name):'')."</name>


<description>".htmlspecialchars(strip_tags($p->annotation))."</description>

<sales_notes>Оплата в магазине.</sales_notes>


</offer>
";
}

print "</offers>
";
print "</shop>
</yml_catalog>
";

 

Link to post
Share on other sites

Спасибо.

Но я уже задумался, а нужно ли вообще так делать?!)))) Проверка от Яндекса вчера пришла по фиду, прошёл её, товар в наличии (в магазине). А если бы сказал нет, или под заказ - заблокировали магазин. Вот и думаешь, пусть лучше фид висит с товарами, которые в наличии в магазине, а не на складе (под заказ).

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...