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

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

Цена: 6000 RUR За каждый XML шаблон

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

Если кратко - главная фича шаблонизатора DLE в том, что его синтаксис основан на правилах русского языка, а не как принято в php и всех прочих языках программирования на основе построения английских слов. И благодаря этой особенности составлять правила вывода блоков внутри шаблона значительно проще. Но это тема для отдельной статьи, возможно когда-нибудь потом она будет написана.

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

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

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

<?xml version="1.0" encoding="{$config['charset']}"?>
<rss xmlns:yandex="http://news.yandex.ru" 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">


И именно в этом проблема, почему нельзя получить правильный 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



Скачать файл: xml2tpl.zip для DLE 13-15.3 [40,05 Kb] (cкачиваний: 17)
Скачать файл: xml2tpl-dle16.zip для DLE 16.0 [358,47 Kb] (cкачиваний: 5)

МЫ принимаем заказы на верстку XML шаблонов для DLE сайтов с вашими наборами дополнительных полей под Avito, avto.ru, drom.ru и Яндекс Маркет.


Пояснения по шаблонам для самых маленьких


Формат YML


Файл шаблона https://github.com/tcse/DLE-xml2tpl/blob/main/templates/xml2yml/main.tpl

Строка

{catmenu id="90" subcat="yes" template="categories" cache="no"}


Формирует список категорий товаров на основе стандартного меню DLE сайта.
Где значение id="90" означает, что у вас первая категория магазина в базе сайта имеет номер 90

Список своих категории смотрите в админке /admin.php?mod=categories



параметр subcat="yes" говорт, что будет генерирована в виде пунктов меню все подпункты.
Таким образом в шаблон YML у нас формируется следующая структура:

<categories>
    <category id="90">Запчасти для тягачей и полуприцепов</category>
    <category id="94">Запчасти Kraker </category>
    <category id="91">Запчасти для полуприцепов WIELTON</category>
    <category id="95">Запчасти Cargo Floor</category>
    <category id="97">Компоненты гидравлических систем</category>
    <category id="98">Профили пола</category>
    <category id="99">Пластиковые компоненты и опоры</category>
    <category id="100">Электрические компоненты</category>
    <category id="101">Аксессуары и крепежные материалы</category>
    <category id="92">Запчасти Binotto</category>
    <category id="107">Гидравлические цилиндры</category>
    <category id="108">КОМ / Вал КОМ</category>
    <category id="109">Гидравлические баки</category>
    <category id="110">Гидравлические насосы</category>
    <category id="111">Гидростанции</category>
    <category id="112">Прочее</category>
    <category id="93">Запчасти MAN</category>
    <category id="96">Аксессуары</category>
</categories>


И далее, при формирования товарного предложения, которое задается все в том же шаблоне путем подключения custom шаблона

<offers>
	{custom category="90" template="custom" available="global"  limit="500" order="reads" sort="desc" cache="no"}
</offers>


Где значение category="90" аналогично тем, что были указаны для генерации меню категории выше.


Файл шаблона https://github.com/tcse/DLE-xml2tpl/blob/main/templates/xml2yml/custom.tpl

В нем описывается каждое отдельное товарное предложение.

Раз родительская категория товаров у нас имеет номер 90, то для каждого товара мы указываем именно ее.

<categoryId>90</categoryId>


К сожалению на данный момент (DLE 15.2) в скрипте отсутствует такое полезный тег как {category-news-id} который бы выводил номер категории у публикации.

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

[catlist=90]<categoryId>90</categoryId>[/catlist]
[catlist=94]<categoryId>94</categoryId>[/catlist]
[catlist=91]<categoryId>91</categoryId>[/catlist]
[catlist=95]<categoryId>95</categoryId>[/catlist]
[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</categoryId>[/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]<categoryId>112</categoryId>[/catlist]
[catlist=93]<categoryId>93</categoryId>[/catlist]
[catlist=96]<categoryId>96</categoryId>[/catlist]

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


Отдельно хочу обратить внимание:


Передавая данные о своем контенте в Яндекс вы льете воду на чужую мельницу.
Пока ваш проект на этапе роста, вам важен любой трафик. НО если вы уже большие и авторитетные, то любые варианты турбо страниц или amp версий только сильнее огораживают интернет в рамках технокомпаний без возможности выхода наружу.

Вот наглядный пример из товаров сгенерированных на основе данного шаблона:
Когда в результате поиска Яндекса открывается турбо-версия магазина, Яндекс Браузер автоматически маскирует имя домена
DLE-xml2tpl - Импорт новостей в формат YML средствами движка DLE


При этом, если нажать на строку ввода адреса, то мы видим реальный адрес домена


Ну и конечно, далеко идущая идея с тем, что ссылки на оригинальный сайт в турбо-страницах есть только в одном единственном месте. И то, эта строка скрыта под скромной надписью "Официальный сайт".



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




И что дальше?


И вот тут мы переходим к самому интересному :)
У вас есть новости-товары автоматически публикуемые на Яндекс Маркет и Авито. Каталог мы не особо стремитесь пополнять (он и так не маленький, условно более 100 позиций) менять цены руками каждый раз это вовсе не интересно и муторно.

Самое время использовать нашу разработку DLE-importNews


Скачиваем с сайта нужные новости, открываем их в экселе и редактируем параметры цены и доступности для YML или XML файлов.

Уважаемые клиенты и посетители сайта, мы оказываем услуги по разработке на заказ отдельных XML шаблонов для Avito, Auto.ru и Drom.ru под ваши сферы деятельности.
Стоимость разработки одного шаблона составляет 6000 рублей.



Дополнительная информация на 31.03.2023



Яндекс Вебмастер при добавлении товарного фида реализованного через шаблонизатор DLE стал выдавать ошибку формата.

Некорректное значение Content-Type. Разрешенные значения Content-Type: application/xml, text/xml, application/octet-stream.


Решение проблемы реализовал следующим образом.
На сайт добавляем маленький php файл, который будет брать ссылку на наш YML шаблон и преобразовывать его в XML файл, который мы размещаем в удобном месте. После чего ссылку на этот файл скармливаем Яндекс вебмастеру.

https://github.com/tcse/DLE-xml2tpl/blob/main/ymlsync.php

Сам файл помещаем в корне сайта. Например с именем ymlsync.php
Следовательно клик по ссылке https://sitename.ru/ymlsync.php запустит скрипт, который возьмет данные из шаблона сайта /archive/xml2yml и сохранит их под именем yml.xml в папке /uploads/

Далее ссылка на XML будет доступна по адресу https://sitename.ru/uploads/yml.xml

Где https://sitename.ru надо заменить на имя вашего домена

Если ваши цены обновляются часто - то для обновления их значений в xml файле будет достаточно настроить его автоматическое выполнение через cron на стороне хостинга.

Примерно вот по такой ссылке

/usr/bin/wget -O - -q "https://sitename.ru/ymlsync.php"


Архив плагина для DLE 16 можно скачать тут Скачать файл: xml2tpl-dle16.zip [358,47 Kb] (cкачиваний: 5)

Машинный Парк - журнал в формате блога

«Машинный парк» — место, где живут знания о коммерческой технике, «М-Парк» — отраслевой портал в

Частное мнение о Яндекс.Турбо

Данная статья является своего рода взглядом со стороны не искушенного пользователя на

Верстка шаблона и внедрение нового дизайна для журнала ГрузАвтоИНФО

Мы рады представить свою новую работу - внедрение дизайна, предоставленного заказчиком, в готовый

AMP4DLE - плагин AMP страниц для DLE

Актуальная версия плагина AMP для DLE https://tcse-cms.com/works/1775-dle-print-page4amp.html

Посещаемость с Яндекс десктопа упала: что произошло в 2019 и как это повлияет в 2020

Главная головная боль всех SEO оптимизаторов – найти причину, если трафик просел. Иногда это можно

Счёт может быть красивым и в HTML, а не в PDF

В статье “Что должно быть в счёте на оплату, чего быть не должно и что дико бесит” мы разбирали