Импорт товаров Yandex xml (YML)

Главные вкладки

Аватар пользователя dr_drongo dr_drongo 3 ноября 2009 в 21:46

ПРиветствую

Такой вопрос. Хочу сделать интернет магазин. Список товаров в формате Yandex xml (YML). Нужно импортировать товары, категории, описания...
С помощью каких модулей это можно организовать?

Заранее благодарю

Комментарии

Аватар пользователя slavik.kz slavik.kz 4 ноября 2009 в 9:01

Я для экспорта в Авто.Яндекс делал, возможно для Маркета проще. И без денег можно разобраться:

  1. Устанавливаем http://drupal.org/project/views_datasource[/module]" (правда пока альфа, но у меня работает).
  2. Активизируем Views XML
  3. Делаем страничное представление (View) со стилем отображения XML data document
  4. Выбираем нужные поля (может пригодится модуль http://drupal.org/project/views_customfield[/module] для формирования полей на php), аргументы и т.п.
  5. В теме оформления представления смотрим какие шаблоны задействованы. Я делал так, создал собственные шаблоны (где MyViewName - имя моего представления):

    Стиль вывода: views-view-xml.tpl.php, views-view-xml--lastads.tpl.php, views-view-xml--page.tpl.php, views-view-xml--lastads--page.tpl.php, views-view-xml--.tpl.php, views-view-xml--page-1.tpl.php, views-view-xml--MyViewName--page-1.tpl.php

    копируем в тему файл views-view-xml.tpl.php (из view_datasource), смотрим его и доводим до такого состояния:

    <?php

    $feeddate=gmdate('Y-m-d H:i:s',$view->result[0]->node_created - 3*3600);

    $xml .= '<?xml version="1.0" encoding="windows-1251"?>
    <auto-catalog>
    <creation-date>'.$feeddate.' GMT+6</creation-date>
    <host>site.com</host>

    <offers>'."\n";

    if(is_array($rows))
    {
      foreach ($rows as $row) {
        $xml .= '<offer>'."\n";
        $xml .= $row;
        $xml .= '</offer>'."\n";
      }
    }

    $xml .='</offers>
    </auto-catalog>';
    if ($view->override_path) print htmlspecialchars(str_reaplce("\n",'<br>',$xml));//тут можно изменить вывод при просмотре, но у меня не работало Dirol
    else {

      drupal_set_header('Content-Type: text/xml; charset=windows-1251');
      print mb_convert_encoding($xml,'Windows-1251', 'UTF-8');
      module_invoke_all('exit');
      exit;
    }

    Стиль вывода колонок: views-view-fields.tpl.php, views-view-fields--lastads.tpl.php, views-view-fields--page.tpl.php, views-view-fields--lastads--page.tpl.php, views-view-fields--.tpl.php, views-view-fields--page-1.tpl.php, views-view-fields--MyViewName--page-1.tpl.php

    Копируем views-view-fields.tpl.php и подгоняем под Яндекс XML (YAL в моем случае)

    <?php
    foreach ($fields as $id => $field) {
    if ($field->label)
    {
    print '<'.$field->label.'>'.views_xml_strip_illegal_chars($field->content).'</'. $field->label .'>'."\n";
    }
    }
    ?>
  6. Теперь у представления указываем путь, и получаем по нему экспортиремый файл
  7. PROFIT!

Немножко рекламы: http://autostan.kz/, экспортируемый файл - http://autostan.kz/export/yandex.auto.xml

Аватар пользователя yustos.com yustos.com 4 ноября 2009 в 10:42

slavik.kz wrote:
Я для экспорта в Авто.Яндекс делал, возможно для Маркета проще. И без денег можно разобраться:

Понравился ответ (буду сейчас подробно разбираться), понравился сайт. Только просьба - в сайте отодвиньте вторую колонку чуть - чуть, наезжает на первую.

Аватар пользователя light9 light9 10 февраля 2010 в 12:30

slavik.kz спасибо огромное! Информация оказалась очень полезной. С Ubercart все замечательно работает.
Но есть одно но т.к. для яндекс.маркета должен быть обязательно указан offer id в каждом контейнере offer.
Подскажите, пожалуйста, как сделать так что бы у меня выводился еще и offer id (с id node или с произвольного cck - например артукул)
пробую конструкции вида в views-view-xml.tpl.php:

<?php foreach ($rows as $row) {
    
$xml .= <offer ' . 'id="' . $node->nid . '">'."\n";
    $xml .= $row;
    $xml .= '
</offer>'."\n";
  }?>

и ничего не выходит.

Спасибо!

Аватар пользователя slavik.kz slavik.kz 4 ноября 2009 в 9:07

Ах да, совсем забыл, можно еще переделать шаблон вывода фида представления (без установки View Datasource), но у меня не получилось, не помню почему... Вроде бы сразу не смог подписи к полям в шаблоне выудить

p.s. в приведенном выше примере Заголовок поля преобразуется в переменную $field->label в xml, то есть достаточно аккуратно создать нужные поля

Аватар пользователя dr_drongo dr_drongo 4 ноября 2009 в 9:30

я извиняюсь, если не точно сформулировал вопрос. Уточню. Список товаров в yml уже есть. Мне его нужно в свой шоп импортировать (категории, цены, описания и т.д.) Если еще и с фозможностью выбора по полям и категориям, так совсем хорошо Smile Может кто-то решал уже подобную задачу, отзовитесь. Дело в том, что спонсор предоставляет свою базу товаров только в yml.

Аватар пользователя slavik.kz slavik.kz 4 ноября 2009 в 9:34

ну ё-моё ) столько старался, писал

навскидку - парсить xml до .csv, потом импортировать http://drupal.org/project/node_import[/module]

но автоматом - модуль написать, кстати просто функционал добавить к вышеуказанному модулю

Аватар пользователя mmarian mmarian 30 апреля 2010 в 13:26

Нужен модуль Яндекс Маркет к Drupal 5-ubercart. Полноценный и работающий. Что бы можно было использовать ССК поля. Кто продает? Пишите в личку.

Аватар пользователя molp molp 2 сентября 2010 в 14:29

Помогите разобраться.

По порядку:

Есть интернет-магазин. Нужно создать файл YML для работы с Yandex.Market.
Данный файл представляет из себя список товаров и имеет определенное форматирование.
Список товаров можно получить создав страничное представление при помощи модуля Views.
А при помощи дополнительного модуля Views XML добавить к модулю Views стиль XML data document.

Итак:

1. Включаю модули Views">http://drupal.org/project/views]Views[/module] и http://drupal.org/project/views_datasource]Views XML">Views">http://drupal.org/project/views_datasource]Views XML
2. Создаю страничное представление View со Style: XML data document

Далее нужно добиться чтобы генерируемое представление отображалось в соответствующем формате. Для этого требуется изменить файл шаблона. И тут начинаются трудности.

slavik.kz wrote:
Копируем в тему файл views-view-xml.tpl.php (из view_datasource)

Там нет файла с таким названием. Есть views-views-xml-style-raw.tpl.php но с ним не получается.

slavik.kz wrote:
Копируем views-view-fields.tpl.php и подгоняем под Яндекс XML (YAL в моем случае)

Откуда? Строки добавляем или заменяем на свои? Для чего этот код нужен?

Аватар пользователя LexSell LexSell 6 июля 2016 в 16:45

Что делать в случае нескольких прайсов? Т.е. не только xml от Яндекса, а и фидов в других форматах csv, excel из которых все надо грузить в магазин. Как быть в таком случае?

Аватар пользователя WooCommerce WooCommerce 21 июля 2016 в 11:41

Есть например вот такая программа для прайсов, допольно хорошо делает сводный прайс-лист из файлов csv, xls, xml. Очень хорошо сделаны возможности привязки товаров прайс-листов к каталогу магазина.

Привязка товаров из прайс-листов поставщиков.

Аватар пользователя Orion76 Orion76 20 июля 2016 в 8:29

LexSell wrote:

Что делать в случае нескольких прайсов?

Практичнее и надежнее конвертировать любым доступным способом(вручную, программно) эти прайсы в какой-то "общий" формат, а уже его "скармливать" импорту Drupal .

Аватар пользователя Orion76 Orion76 20 июля 2016 в 14:47

LexSell wrote:

Вам случайно не попадались конвертеры yml в csv?

yml это xml
"Загнать" csv в yml сложная задача, т.к. csv это "плоская" таблица, а xml - "дерево"
Проще наоборот - csv конвертировать в yml (помоему это даже Excel умеет),
тем более что yml - практически стандарт для обмена данными о товарах и т.п..

А вот преобразовать нестандартный xml в yml проще.
https://ru.wikipedia.org/wiki/XSLT