Главная страница / Сторонние модули / Импорт новостей в формат YML средствами движка DLE
сентябрь 14 2022

Импорт новостей в формат YML средствами движка DLE

В данной статье будут описаны принципы создания шаблона в формате XML для дальнейшей самостоятельной модификации. Стоит обратить внимание, что у каждого сайта свой набор полей, их можно и нужно прописывать в шаблоны самостоятельно. Я лишь показываю, что штатными средствами движка DLE можно генерировать XML файлы которые будут корректно обработаны при импорте на внешние сайты.

Выбрав в 2006 году DLE в качестве платформы для разработки сайтов все еще не пожалел. В том числе из-за шикарного шаблонизатора, благодаря которому с минимальными знаниями основ программирования любой начинающий вебмастер может адаптировать под себя внешний вид своего проекта.

В данной статье будут описаны принципы создания шаблона в формате XML для дальнейшей самостоятельной модификации.

Стандартный RSS поток DLE формируется на основе шаблона /tempates/rss.tpl и содержит в себе отдельные секции вывода информации в зависимости от настроек шаблона:

— Обычный RSS поток
— В формате Яндекс-Турбо
— В формате Яндекс Новости

Все три этих варианта объеденены единой оберткой описанной в файле /engine/rss.php

<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" version="2.0">
<channel>
....
</channel>
</rss>

И именно в этом проблема, почему нельзя получить правильный YML формат для товарного фида Яндекс Маркета. Тоже самое для автоматического импорта новостей для avito.

Но все как оказалось решается штатными средствами движка — мы просто создаем новый шаблон для определенной категории сайта и именно его адрес в качестве ссылки на YML отдаем Яндексу.

Готовые шаблоны доступны в репозитории https://github.com/tcse/DLE-xml2tpl
Шаблон импорта в формате YML https://github.com/tcse/DLE-xml2tpl/tree/main/tempates/xml2yml
Шаблон импорта в формате XML для Avito https://github.com/tcse/DLE-xml2tpl/tree/main/templates/xml2avitoru

Что такое YML формат и зачем он нужен сайту

О формате YML вы можете прочитать по адресу https://yandex.ru/support/partnermarket/export/yml.html#yml-format Стандарт YML (Yandex Market Language )разработан Яндексом и основан на стандарте XML.Формат YML предоставляет больше возможностей и преимуществ, чем форматы XLS, CSV. Типовой пример в формате .yml https://yandex.ru/support/partnermarket/export/yml.html#yml_example

Нам данный формат интересен для создания Яндекс Турбо страниц интернет-магазинов. Заходим в свой кабинет на Яндекс Вебмастере https://webmaster.yandex.ru/ и ищем раздел «Турбо-страницы для интернет-магазинов»

Общая инструкция по подключению от яндекса тут https://yandex.ru/dev/turbo-shop/doc/quick-start/markets.html

Главное, без чего не будет произведен импорт — это цена товара. Если ваш сайт на DLE используется в том числе для создания витрину товаров, то отдельное дополнительное поле с ценой у вас скорее всего уже есть. После подключения турбо-страниц для магазинов у вас получиться что-то типа

И так, примеры шаблонов скачены и установлены на сайт. Остается добавить (при необходимости) нужные дополнительные поля. Для этого переходим Настройки скрипта -> Дополнительные поля новостей. Добавить в разделе дополнительных полей новостей следующие поля:

Либо открыть по ftp файл /engine/data/xfields.txt и дописать в самый конец

xml2tpl_io-yml|Включить вывод в формат YML||yesorno||0|0|0|0|||0|0|||||0|Если выключено - Данная новость не попадает в товарный фид||||||||
xml2tpl_io-avito|Включить вывод в формат Avito.ru||yesorno||0|0|0|0|||0|0|||||0|Если выключено - Данная новость не попадает в товарный фид||||||||
xml2tpl_price|Цена для xml2tpl||text||1|0|0|1|||0|0||||||Используется для импорта в форматы YML и Avito||||||||
xml2tpl_currencyid|Валюта, в которой указана цена товара для xml2tpl||select|RUR__NEWL__USD__NEWL__EUR__NEWL__BYN__NEWL__KZT__NEWL__UAH|0|0|0|0|||0|0||||||Цена и валюта должны соответствовать друг другу. Например, вместе с USD надо указывать цену в долларах, а не в рублях.||||||||
xml2tpl_vendor|Название производителя  для xml2tpl||text||1|0|0|1|||0|0||||||||||||||
xml2tpl_vendorcode|Код товара, который ему присвоил производитель  для xml2tpl||text||1|0|0|1|||0|0||||||||||||||

После чего при редактировании новостей появятся новые поля для корректного заполнения товарного фида.

Следующим шагом вам потребуется создать новую категорию сайта и в ее настройках выбрать в секции Установить другой шаблон для категории: шаблон с именем xml2yml для товарного фида YML

или шаблон с именем xml2avitoru для импорта объявлений на Avito

Так же рекомендуется установить в настройках категории запрет на поиск по сайту и отключить генерацию яндекс турбо страниц.

Далее получаем ссылки на категории сайтов внутри которых у нас формируются новости. Для демонстрации работы я сделал 2 таких категории https://tcse-cms.com/archive/xml2yml/ для формата YML.

и https://tcse-cms.com/archive/xml2avitoru/ для Avito

Переходим в Яндекс Вебмастер и добавляем ссылку на источник

тестируем правильность фида

там же можно посмотреть предварительную версию

Примерно так же все происходит и с форматом импорта на Avito.ru. Сам фид можно протестировать на соответствие по ссылке https://autoload.avito.ru/format/xmlcheck/

Стоит обратить внимание, что у каждого сайта свой набор полей, их можно и нужно прописывать в шаблоны самостоятельно.
Я лишь показал, что штатными средствами движка DLE можно генерировать XML файлы которые будут корректно обработаны при импорте на внешние сайты.

Скачать исходники шаблонов можно в репозитории https://github.com/tcse/DLE-xml2tpl

Версия шаблонов в виде плагина доступна по ссылке https://github.com/tcse/DLE-xml2tpl/releases/download/1.0/xml2tpl.zip

Комментарии

  1. TCSE (Клиенты)

    14 сентября 2022 12:05 51 комментарий

    Известный баги на сегодня

    Для YML файла генерация первоначального меню категорий товаров происходит через базовое DLE меню в строке 

    {catmenu id="21" subcat="no" template="categories" cache="no"}

    где id="21" это номер вашей категории с товарами.
    И если у вас большая система подкатегорий, то в самом товарном фиде в секции  /templates/xml2yml/custom.tpl

    <categoryId>21</categoryId>

    нужно указывать номер категории к которой относится новость (товар). А сделать это автоматически не получиться, так как в DLE нет тега {category-news-id} который бы выводил номер категории у публикации.

    По этой причине приходится собирать костыль в виде

    [catlist=90]<categoryId>90</categoryId>[/catlist][catlist=94]<categoryId>94</categoryId>[/catli
    st][catlist=91]<categoryId>91</categoryId>[/catlist][catlist=95]<categoryId>95</categoryId>[/ca
    tlist][catlist=97]<categoryId>97</categoryId>[/catlist][catlist=98]<categoryId>98</categoryId>[
    /catlist][catlist=99]<categoryId>99</categoryId>[/catlist][catlist=100]<categoryId>100</categoryId
    >[/catlist][catlist=101]<categoryId>101</categoryId>[/catlist][catlist=92]<categoryId>92</categ
    oryId>[/catlist][catlist=107]<categoryId>107</categoryId>[/catlist][catlist=108]<categoryId>108<
    ;/categoryId>[/catlist][catlist=109]<categoryId>109</categoryId>[/catlist][catlist=110]<categoryId>
    ;110</categoryId>[/catlist][catlist=111]<categoryId>111</categoryId>[/catlist][catlist=112]<catego
    ryId>112</categoryId>[/catlist][catlist=93]<categoryId>93</categoryId>[/catlist][catlist=96]<ca
    tegoryId>96</categoryId>[/catlist]

    Описывая правильные номера категорий для товаров.

    Альтернатива - прописывать в файл шаблона /templates/xml2yml/main.tplвсю структуру категорий товара руками, а не генерировать автоматически средствами движка.

Информация

Комментирование публикаций доступно только пользователям имеющим действующую лицензию на скрипт. Если вы уже приобретали скрипт, то вам необходимо зайти на сайт под своим клиентским аккаунтом.

Календарь

«    Октябрь 2022    »
ПнВтСрЧтПтСбВс
 12
3456789
10111213141516
17181920212223
24252627282930
31 

Опрос на сайте

Совершаете ли вы покупки в интернет?