Рано или поздно для интернет-магазинов (или просто магазинов-салонов) может возникнуть необходимость вывода товаров на Яндекс.Маркет. По статистике Яндекса (июнь 2011), более 9 млн. покупателей по всей России выбирают Яндекс.Маркет, чтобы сравнить цены и найти лучшее предложение для себя.
Для трансляции товаров из магазинов, Яндекс.Маркет требует загрузить прайс-лист в особом формате — YML (на самом деле, его можно генерировать с помощью языка программирования — в моем случае, PHP, -подобно родительному XML-формату). О создании такого файла для движка osCommerce читаем под катом.
После регистрации магазина на Яндекс.Маркете, требуется ввести ссылку на ваш прайс-лист. Это ссылка, которая будет иметь своим содержанием заранее приготовленный файл (в нашем случае, «ya-market.php»).
В интернете я нашла некоторые «готовые решения» для osCommerce, но они, в итоге, оказались непригодными. Поэтому мне пришлось полностью переписывать один из найденных php-файлов. Выкладываю то, что получилось.
Для начала, определяем header файла. Информация о всех наших товарах записана в базу данных MySQL, — подключаемся к ней: вводим нужные значения в соответствующие поля и устанавливаем соединение.
/**************************************************
* Скрипт ya-market.php для выгрузки товаров в формате YML для интернет-магазина на движке osCommerce 2.3
* Дата разработки: 25 июня 2011
* Разработчик: Володина Нина
* Сайт: www.codda.ru
// Скрипт распространяется по лицензии GNU.
// Вы можете использовать скрипт на свой страх и риск. За любые ошибки разработчики отвественности не несут.
**************************************************/
header('Content-type: application/xml');
header("Content-Type: text/xml; charset=utf-8");
$kurs=$currency_value[0];
define('DB_HOST', '');//Вписать сервер бд
define('DB_USER', '');//Вписать имя пользователя
define('DB_PASS', '');//Вписать пароль
define('DB_NAME', '');//Вписать имя базы данных
$ctt = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die(mysql_error());
$db = mysql_select_db(DB_NAME) or die("Ошибка базы данных");
mysql_query ("SET NAMES 'latin1'");
В моем случае, корректная кодировка для работы с БД — latin1. Если у вас по умолчанию задействована другая кодировка, используйте ее имя в определении передачи данных.
Начинаем генерировать XML. Определяем переменные для заголовка (название интернет-магазина, адрес сайта, описание), а также текущую валюту.
#########################
# Начинаем генерировать XML
# переменные для заголовка
$cdate = date("Y-m-d H:i",time());
$csite = "http://www.moy-sayt.ru/";//Вписать адрес интернет-магазина
$cname = "";//Вписать название интернет-магазина
$csite2 = $csite;
$cname2 = $cname;
$cdesc = "";//Вписать описание интернет-магазина
#----------------------------------------------
$yandex=<<
$cname
$cdesc
$csite
END;
Приступаем к выводу категорий и подкатегорий для Яндекса. Т.к. по специфике osCommerce, данные о категориях разъединены на 2 таблицы (ID родительской категории хранится в таблице «categories», а название категории — в «categories_description»), нам нужно отправить запрос к обеим из них, идентифицируя каждую по ID.
$arr_cats=array();
#----------------------------------------------
# для Яндекса выводим все подкатегории
$yandex .= "\n\n\n";
$tmp="
select
c.categories_id as categoryID, cd.categories_name as name, c.parent_id as parent
FROM
categories as c, categories_description as cd where c.categories_id = cd.categories_id AND cd.language_id=2
ORDER BY
parent, name";
$res = mysql_query($tmp);
while ($rezzzz = mysql_fetch_array($res)){
#экранируем спецсимволы
$rezzzz['name']=htmlspecialchars($rezzzz['name']);
$fftt = " 0) $fftt .= " parentId=\"".$rezzzz['parent']."\"";
$fftt.= ">".$rezzzz['name']." \n";
$yandex .= $fftt;
$arr_cats[$rezzzz['categoryID']]=$rezzzz;
}
$yandex .= " \n";
#----------------------------------------------
$yandex .="\n\n";
#----- YANDEX ------
Аналогично категориям, для вывода товаров, мы будем использовать запрос к двум основным таблицам («products» и «products_description»), а также к таблице по «привязке» товара к категориям — «products_to_categories». Мы будем выводить только те товары, у которых цена больше нуля (p.products_price>0) и статус которых равен 1 (утвержденные товары — p.products_status=1), на русском языке (pd.language_id=2).
$tmp="
select
p.products_id AS productID,
p.products_price AS Price,
p.products_image AS picture,
p.products_status AS in_stock,
pd.products_id,
pd.products_name AS name,
pd.products_description AS brief_description,
pc.categories_id AS categoryID,
pc.products_id
FROM
products AS p,
products_description AS pd,
products_to_categories AS pc
WHERE
p.products_price>0
AND pd.products_id=p.products_id
AND pc.products_id=p.products_id
AND p.products_status=1
AND pd.language_id=2
ORDER BY name";
$res = mysql_query($tmp);
while ($tovar = mysql_fetch_array($res)) {
$valuta="RUR";//изменить на нужную валюту
$price=$tovar[Price];
$price=intval($price);
$description=htmlspecialchars(strip_tags($tovar[brief_description]));
$tovar['name'] = htmlspecialchars($tovar['name']);
#фотография
if ($tovar['picture'] != "") {
$src_file = $csite."catalog/images/".$tovar['picture'];
$ppy = "".$src_file." ";
} else {
$ppy = "";
}
#----------------------------------------------
$yandex.=<<
{$csite}catalog/$tovar[categoryID]-p-$tovar[productID].html
$price
$valuta
$tovar[categoryID]
$ppy
$tovar[name]
$description
END;
}
$yandex .= "\n\n\n";
#выводим, что нагенерили
echo $yandex;
?>
Примечание. Скрипт был написан специально под osCommerce с тюнинговой сборкой (см. Тюнинг osCommerce v.2.3) . Возможны некоторые несовпадения с базовой версией osCommerce 2.3.
Официальное описание YML от Яндекса.
То, что у нас должно получиться (для сокращения кода, из списка убраны ряд фрагментов
−
−
Колесные диски и шины
Продажа шин и дисков для иномарок премиум класса
http://www.moy-sayt.ru/
−
−
ДИСКИ
ШИНЫ
Диски AUDI
Диски BENTLEY
Диски BMW
Диски CADILLAC
Диски CHEVROLET
Диски HUMMER
Диски INFINITY
Диски LAND ROVER
Диски LEXUS
Диски MERCEDES
Диски NISSAN
Диски PORSCHE
Диски SUBARU
Диски TOYOTA
Диски VOLKSWAGEN
Диски VOLVO
Б/У покрышки
Шины. Зима
Шины. Лето
−
−
http://www.moy-sayt.ru/catalog/187-p-399.html
11000
RUR
187
−
http://www.moy-sayt.ru/catalog/images/ДУИЛЕР_diski.jpg
Bridgestone Dueler H/P Sport
−
265-50-19
ЦЕНА УКАЗАНА ЗА 1 КОЛЕСО
Bridgestone Dueler H/P Sport- летняя шина для автомобилей 4x4 предназначена для езды на высоких скоростях по трассам и шоссе и входит в первичные комплектации автомобилей Audi Q7, Porsche Cayanne, VW Touareg, обновленной BMW X5 и т.д. Dueler H/P Sport - это великолепная управляемость как на мокрой, так и на сухой дороге. Если Вы хотите приблизить характер Вашего внедорожника к легковому автомобилю и любите динамичную езду, то Вы обязательно оцените шины Dueler H/P Sport, особенно учитывая комфорт и бесшумность, которые они обеспечивают.
−
http://www.moy-sayt.ru/catalog/187-p-402.html
17500
RUR
187
−
http://www.moy-sayt.ru/catalog/images/conticrosscontactuhp_diski.jpg
Continental CrossContact UHP
−
295-35-21
ЦЕНА УКАЗАНА ЗА 1 КОЛЕСО
Continental имеет в своем арсенале шины, специально разработанные для супермощных 4WD автомобилей - шины ContiCrossContact UHP.
Их технические характеристики, включая кратчайший тормозной путь и исключительные показатели устойчивости при поворотах на больших скоростях и прекрасная управляемость, делают их незаменимыми для таких требовательных автомобилей 4WD, как: Porsche Cayenne, BMW X5, Range Rover Sport и т. д. Это покрывает большую часть рынка в области размеров для тюнинга, а также спроса на высокоскоросные шины классов V, W, Y, и Z (с индексами скорости от 210 км/ч до более 300км/ч).
−
http://www.moy-sayt.ru/catalog/187-p-528.html
5250
RUR
187
−
http://www.moy-sayt.ru/catalog/images/DEREZA_diski.jpg
dUNLOP DIREZZA DZ101 215/55 R17
−
Одна из последних разработок японского завода Dunlop.
Шина произведена по усовершенствованной фирменной технологии DIGI-TYRE, получившей название Digital Rolling Simulation II:
ещё меньший тормозной путь;
ещё большее пятно контакта и, как следствие, великолепная устойчивость на высоких скоростях;
потрясающее сцепление с мокрой дорогой;
ещё меньшее сопротивление качению - меньший износ и экономия топлива;
ещё меньший уровень шума.
Это шина, в первую очередь, ориентирована на любителей спортивного типа вождения, но, естественно, её можно рекомендовать абсолютно всем автомобилистам.
−
http://www.moy-sayt.ru/catalog/187-p-529.html
5300
RUR
187
−
http://www.moy-sayt.ru/catalog/images/DUNLOP_SP_Sport_230-500x500_diski.jpg
DUNLOP SP SPORT 230 215/55 R17
−
Используя инновационный дизайн трехсегментного протектора, компания Dunlop разработала новую модель шин - SP Sport 230, которая позволяет обеспечить плавность хода и высокий уровень безопасности. Новая модель шин подойдет и для любителей спортивного стиля вождения. Разделение протектора на три зоны обеспечивает оптимальное поведение автомобиля на дороге вне зависимости от состояния дорожного покрытия и дорожных условий. Это делает представленную модель шин идеальной для автомобилей верхнего сегмента среднего класса, а также для седанов класса люкс.
//Вписать свой адрес магазина