Приветствую! Дамы и Господа!
Я пишу в своем блоге не только информацию для начинающих, по крайней мере, этой записью, я это докажу.
В своей работе, я периодически сталкиваюсь с разного рода задачами, и в этот раз, меня попросили написать скрипт для генерации YML файла.
Данный скрипт обращается к базе данных сайта, берет из заданных колонок и строк. нужную информацию и из этого формирует файл YML формата, который многим нужен для загрузки в Яндекс Маркет, в различные агрегаторы и пр.
В данном случае, скрипт был нужен для выгрузки более 8000 товаров в онлайн гипермаркет SATU. Кто не знает — вот ссылочка: https://satu.kz/.
Вот что умеет данный скрипт:
- Автоматическое обновление при обращении. Т.е. при каждом обращении, в файл попадает только актуальная информация из базы данных.
- Формирование данных XML формата.
И собственно все. Можно расширить эти возможности, к примеру, сделать разбивку на несколько файлов. Или можно поменять формат и использовать скрипт для собственных целей.
Вот он готовенький. Вам необходимо только указать данные доступа к базе данных MySQL, нужные таблицы, и выборку значений. Если будут вопросы, можете задать их мне. На этом все. Код ниже.
Спасибо за внимание!
<?php // Подключение к ДБ. $dbh = new PDO('mysql:dbname=dbname;host=localhost', 'LOGIN', 'PASSWORD', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")); $out = '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n"; $out .= '<yml_catalog date="' . date('Y-m-d H:i') . '">' . "\r\n"; $out .= '<shop>' . "\r\n"; // Короткое название магазина, должно содержать не более 20 символов. $out .= '<name>Name</name>' . "\r\n"; // Полное наименование компании, владеющей магазином. $out .= '<company>ООО «БУРАТИНО»</company>' . "\r\n"; // URL главной страницы магазина. $out .= '<url>http://site.ru/</url>' . "\r\n"; // Список курсов валют магазина. $out .= '<currencies>' . "\r\n"; $out .= '<currency id="RUR" rate="1"/>' . "\r\n"; $out .= '</currencies>' . "\r\n"; // Список категорий магазина: // id - ID категории. // parent - ID родительской категории. // name - Название категории. $sth = $dbh->prepare("SELECT `id`, `idMerge`, `name`, `name_chpu` FROM `catalogFolders` where id!=245 AND id!=134 AND id!=144 AND id!=2 AND id!=16 AND id!=15 AND id!=142 AND id!=65 ORDER BY name"); $sth->execute(); $category = $sth->fetchAll(PDO::FETCH_ASSOC); $out .= '<categories>' . "\r\n"; foreach ($category as $row) { $out .= '<category id="' . $row['id'] . '" parentId="' . $row['idMerge'] . '">' . $row['name'] . '</category>' . "\r\n"; } $out .= '</categories>' . "\r\n"; // Вывод товаров: $sth = $dbh->prepare("SELECT `id`, `idMerge`, `price2`, `price1`, `image`, `fullName`, `fullName_chpu`, `desc`, `num`, `art` FROM `catalogGoods` where idMerge!=245 AND idMerge!=134 AND idMerge!=144 AND idMerge!=2 AND idMerge!=16 AND idMerge!=15 AND idMerge!=142 AND idMerge!=65 AND idMerge!=0 AND price1!=0 AND art<20"); $sth->execute(); $prods = $sth->fetchAll(PDO::FETCH_ASSOC); $out .= '<offers>' . "\r\n"; foreach ($prods as $row) { $out .= '<offer id="' . $row['id'] . '" selling_type="u">' . "\r\n"; // URL страницы товара на сайте магазина. $out .= '<url>http://site.ru/catalog/' . $row['fullName_chpu'] . '</url>' . "\r\n"; // Цена, предполагается что в БД хранится цена и цена со скидкой. if (!empty($row['price1'])) { $out .= '<price>' . $row['price1'] . '</price>' . "\r\n"; $out .= '<prices>' . "\r\n"; $out .= '<price>' . "\r\n"; $out .= '<value>' . $row['price2'] . '</value>' . "\r\n"; $out .= '<quantity>5</quantity>' . "\r\n"; $out .= '</price>' . "\r\n"; $out .= '</prices>' . "\r\n"; } else { $out .= '<price>' . $row['price1'] . '</price>' . "\r\n"; } // Валюта товара. $out .= '<currencyId>RUR</currencyId>' . "\r\n"; // ID категории. $out .= '<categoryId>' . $row['idMerge'] . '</categoryId>' . "\r\n"; // Изображения товара, до 10 ссылок. $out .= '<picture>http://site.ru/catalogImages/' . $row['image'] . '</picture>' . "\r\n"; // Название товара. $out .= '<name>'.$row['fullName'].'</name>' . "\r\n"; // Описание товара, максимум 3000 символов. $out .= '<description>' . stripslashes($row['desc']) . '</description>' . "\r\n"; //Минимальное количество $out .= '<minimum_order_quantity>1</minimum_order_quantity>' . "\r\n"; //Количество в наличии $out .= '<quantity_in_stock>'.$row['num'].'</quantity_in_stock>' . "\r\n"; //Артикул $out .= '<vendorCode>'.$row['art'].'</vendorCode>' . "\r\n"; $out .= '</offer>' . "\r\n"; } $out .= '</offers>' . "\r\n"; $out .= '</shop>' . "\r\n"; $out .= '</yml_catalog>' . "\r\n"; header('Content-Type: text/xml; charset=utf-8'); echo $out; exit;