YML для сайта на CMS MODx в юникоде

Yandex Маркет почему то отказывается принимать XML в UTF-8. Ну а если сайт на MODx в кодировке UTF-8 то и xml получается на выходе в юникоде. Вообщем не беда , перекодируем.

Для работоспособности этого кода необходимо установить PHx. Проверьте конфигурацию PHP на предмет наличия рабочей функции iconv

1) Создаём докумет с шаблоном "(blank)" ,Тип содержимого = "text/xml" и следующим содержимым: (Описание на стандарт YML ищите на ... Яндексе )

  1.  
  2. <?xml version="1.0" encoding="windows-1251"?>
  3. <!DOCTYPE yml_catalog SYSTEM "shops.dtd">
  4. <yml_catalog date="[*editedon:date=`%Y-%m-%d %H:%M`*]">
  5.  
  6. <shop>
  7. <name>Мой магазин</name>
  8. <company>ООО Рога и копыта</company>
  9. <url>[(site_url)]</url>
  10.  
  11. <currencies>
  12. <currency id="RUR" rate="1"/>
  13. </currencies>
  14.  
  15. <categories>
  16. [!Ditto? &id=`category` &parents=`XXX` &depth=`0` &display=`all` &filter=`isfolder,1,1` &tpl=`yml-category-tpl`!]
  17. </categories>
  18.  
  19. <offers>
  20.  
  21. [!Ditto? &id=`yml` &parents=`XXX` &depth=`0` &display=`all` &tpl=`yml_tpl` &paginate=`0` &showPublishedOnly=`1` &hidefolder=`1` &tagData=`tvyandex-yml` &tags=`1` !]
  22.  
  23. </offers>
  24. </shop>
  25. </yml_catalog>
  26.  

Вместо XXX вставляем id папок где хранятся продукты.

2) Создаём следующие TV и назначаем их соответствующему шаблону:
price - текстовое поле (цена)
vendorcode - текстовое поле (название произодителя)
yandex-yml - Check box, Возможные значения "Да==1" , Значение по умолчанию "Нет==0"
yml-image - текстовое поле ( путь к картинке )

3) Создаём чанк {{yml_tpl}}

  1.  
  2. <offer id="[+id+]" available="true">
  3. <url>[(site_url)][~[+id+]~]</url>
  4. <price>[+price+]</price>
  5. <currencyId>RUR</currencyId>
  6. <categoryId>[+parent+]</categoryId>
  7. <picture>[+tvyml-image:ifnotempty=`[(site_url)][+yml-image+]`+]</picture>
  8. <delivery>true</delivery>
  9. <name>[+pagetitle:notags+]</name>
  10. <vendorCode>[+vendorcode+]</vendorCode>
  11.  
  12. <description>
  13. [+introtext:notags+]
  14. </description>
  15. </offer>
  16.  

4) Создаём чанк {{yml-category-tpl}}

  1.  
  2. <category id="[+id+]"> [+pagetitle+] </category>
  3.  

5) Создаём файлик shop.php и помещаем его, например, в корень сайта.
Содержимое следующее:

  1.  
  2. <?php
  3. header("Content-type: text/xml");
  4. $handle = fopen("http://мой домен.ru/index.php?id=YYY", "rb"); //не забываем поменять !!!
  5. $contents = '';
  6. while (!feof($handle)) {
  7. $contents .= fread($handle, 8192);
  8. }
  9. fclose($handle);
  10.  
  11. print iconv("UTF-8","Windows-1251", $contents);
  12. ?>
  13.  

Меняем домен сайта и вместо YYY вставляем id документа, куда помещали код с вызовами Ditto.
Открываем в FF http://мой домен.ru/shop.php и проверяем свойства страницы.
Ну осталось только пробежаться по страничкам и проставить галки на против yandex-yml.

Последнее изменение документа: 04 Октябрь 2009

Write a comment

  • Required fields are marked with *.

If you have trouble reading the code, click on the code itself to generate a new random code.