Для генерации yml каталога (формат xml, разработанный специально для Яндекс-маркета и схожих сервисов) нам потребуется массив с данными, который имеет структуру:
Array
(
[0] => Array
(
[ID] => 1032586
[photo] => https://image_link.jpg
[price] => 790.00
[sku] => sku_241
[title] => Название товара 1
[url] => https://link_product/
[description] => Описание товара 1
)
[1] => Array
(
[ID] => 1032586
[photo] => https://image_link.jpg
[price] => 790.00
[sku] => sku_241
[title] => Название товара 2
[url] => https://link_product/
[description] => Описание товара 2
)
)
После того, как массив с товарами готов, можно приступить к формированию строки с тегами yml и сохранении ее в формат xml с соответствующими кодировками и сущностями. Вот пример функции для генерации и сохранения на сервере файла в формате YML:
function generateXML($data) { $xmlDoc = new DOMDocument('1.0', 'utf-8'); $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>Prosale.store</name>' . "\r\n"; // Полное наименование компании, владеющей магазином $out .= '<company>Товары магазина MTS</company>' . "\r\n"; // URL главной страницы магазина $out .= '<url>https://prosale.store/</url>' . "\r\n"; // Список курсов валют магазина $out .= '<currencies>' . "\r\n"; $out .= '<currency id="RUR" rate="1"/>' . "\r\n"; $out .= '</currencies>' . "\r\n"; // Вывод товаров: $out .= '<offers>' . "\r\n"; foreach ($data as $row) { $out .= '<offer id="' . $row['sku'] . '">' . "\r\n"; // URL страницы товара на сайте магазина $out .= '<url>'.$row['url'].'</url>' . "\r\n"; // Цена, предполагается что в БД хранится цена и цена со скидкой $out .= '<price>' . $row['price'] . '</price>' . "\r\n"; // Валюта товара $out .= '<currencyId>RUR</currencyId>' . "\r\n"; // ID категории // $out .= '<categoryId>' . $row['category'] . '</categoryId>' . "\r\n"; // Изображения товара, до 10 ссылок $out .= '<picture>' . $row['photo'] . '</picture>' . "\r\n"; // Название товара $out .= '<name>'.$row['title'].'</name>' . "\r\n"; // Описание товара, максимум 3000 символов $out .= '<description><![CDATA[' . stripslashes($row['description']) . ']]></description>' . "\r\n"; $out .= '</offer>' . "\r\n"; } $out .= '</offers>' . "\r\n"; $out .= '</shop>' . "\r\n"; $out .= '</yml_catalog>' . "\r\n"; $xmlDoc->loadXml($out); $xmlDoc->saveXml(); //make the output pretty $xmlDoc->formatOutput = true; //save xml file $file_name = date('d-m-Y-H-i-s').'.xml'; $xmlDoc->save('/path_to_file/xml/'.$file_name); //return xml file name return $file_name; }