Генерация yml (xml) файла-каталога на php

0
73

Для генерации 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;
}
 

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь