Приветствую всех.
В этой теме прошу помощи в попытке сделать полуавтоматический экспорт в файл поддерживаемый market.yandex.** (yml). По мотивам способа представленного здесь.
Что есть:
Drupal7+Commerce
Views
Views data export
Есть вьюха с дисплеем "Data Export" в формате вывода XML. У неё переопределен вывод стилей (XML выводится 3-мя частями - Header, Body и Footer).
В хедере переопределен вывод и прописаны Doctype и другие данные необходимые для маркета. Плюс програмно вставлена другая вьюха [источник], отвечающая за формирование категорий (...). Ниже код:
<?php
/**
* file views-view-table.tpl.php
* Template to display a view as a table.
*
* - $title : The title of this group of rows. May be empty.
* - $rows: An array of row items. Each row is an array of content
* keyed by field ID.
* - $header: an array of headers(labels) for fields.
* - $themed_rows: a array of rows with themed fields.
* ingroup views_templates
*/
// Short tags act bad below in the html so we print it here.
print '<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date=" ">
<shop>
<name>Имя магазина</name>
<company>Компания</company>
<url>http://mysite.com</url>
<currencies>
<currency id="UAH" rate="1"/>
</currencies>
<categories>'?>
<?php
// отображаем представление
print views_embed_view('yml_categories',$display_id='yml_cat');
// yml_categories - имя представления
// yml_cat - идентификатор представления (внутреннее имя представления)
?>
</categories>;
<offers>?>
Темплейт Body тоже переопределен
Код:
<?php
/**
* file views-view-table.tpl.php
* Template to display a view as a table.
*
* - $title : The title of this group of rows. May be empty.
* - $rows: An array of row items. Each row is an array of content
* keyed by field ID.
* - $header: an array of headers(labels) for fields.
* - $themed_rows: a array of rows with themed fields.
* ingroup views_templates
*/
?>
<?php foreach ($themed_rows as $count => $row): ?>
<<?php print 'offer available="true" id="Тут нужно отобразить ID товара"'; ?>>
<?php foreach ($row as $field => $content): ?>
<<?php print $xml_tag[$field]; ?>><?php print $content; ?></<?php print $xml_tag[$field]; ?>>
<?php endforeach; ?>
</<?php print 'offer' ?>>
<?php endforeach; ?>
Ну и Footer:
<?php
</offers>
</shop>
</yml_catalog>?>
В прикрепленном файле скрин текущего отображения файла.
C чем проблемы:
1. Не могу вывести значение поля в переопределенном шаблоне:
<?php<<?php print 'offer available="true" id="Тут нужно отобразить ID товара"'; ?>>?>
Поле загружается во вьюхе, (пробывал артикул [sku] и ID ноды [nid]), но вывести через шаблон не получилось...
Этот метод не получилось применить.
Это главная проблема, т.к. требуется выводить очень много подобных полей, вчастности полностью переопределенное представление категорий.
2. Вывод текущего времени/даты (на момент формирования) в шапке:
<?php<yml_catalog date="Текущая дата">?>
Это что касается вопросов.
Теперь оправдания:
PHP? - знаю ооочень поверхностно, учу, но пока недоучил до понимания решения этих задач, честно - недавно приступил к обучению, а времени на него не всегда хватает;
API Друпала? - попытался разобраться, и понял что без PHP не разберусь;
Заказать разработку модуля - со стыдом сознаюсь что не имею достаточного бюджета, потому и пытаюсь сделать все сам. Как только появится заработок - обязательно закажу профессиональное решение у спецов;
Почему Views? - с ним я умею работать, плюс есть необходимость делать дискрипшн из комбинаций разных полей. Есть необходимость создания разных прайсов с разными значениями цены, взятых с разных полей (отличных от поля "price").
Почему Data export? - умеет работать с большим количеством данных (batch);
Google? - был там, правда. Очень много тем - очень мало решений, решения своих не нашел, только по тому и создал эту тему.
Буду очень признателен за любую помощь и наводку на решения! Уверен что вопрос актуален для многих, т.к. это универсальное решение.
Вложение | Размер |
---|---|
tekushchee_otobrazhenie_predstavleniya.png | 6.43 КБ |
Комментарии
Никто так и не поможет?
Может стоит попробовать сделать экспорт в формате csv. Market csv тоже ест. Или csv не подходит?
Да вот именно, что это не для маркета.
Много нынче кто их форматом пользуется. При чем исключительно им.
мож за три года кто то решил вопрос №1? тоже с ним прилип
вопрос 2 у меня решился так
<yml_catalog date="<?php echo date('Y-m-d h:i'); ?>
Не знаю, поможет вам или нет...
Я не очень давно делал экспорт в XLS через PHPExcel и для данных о позициях заказа использовал вьюс с экспортом в json (брал данные через $obj = drupal_json_decode(views_embed_view(...)), ну и потом foreache'м разбор данных ($objRow['sku'], например).
<?php<<?php print 'offer available="true" id="'?><?php print $row["product_id"]; ?><?php print '"'; ?>>?>
Итог вот что примерно так:
views-data-export-xml-header--yml.tpl.php
<?php print '<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="'?><?php echo date('Y-m-d h:i'); ?><?php print '">
<shop>
<name>123</name>
<company>456</company>
<url>http://123.ru</url>
<currencies>
<currency id="RUB" rate="1"/>
</currencies>
<categories>
</categories>
<offers>'?>
views-data-export-xml-body--yml.tpl.php
<?php foreach ($themed_rows as $count => $row): ?>
<<?php print 'offer available="true" id="'?><?php print $row["product_id"]; ?><?php print '"'; ?>>
<?php foreach ($row as $field => $content): ?>
<<?php print $xml_tag[$field]; ?>><?php print $content; ?></<?php print $xml_tag[$field]; ?>>
<?php endforeach; ?>
</<?php print 'offer' ?>>
<?php endforeach; ?>
?php print $row["product_id"]; ?> - добавляется поле референс ID product commerce
views-data-export-xml-footer--yml.tpl.php
<?php</offers></shop></yml_catalog>?>
Работает спасибо!! но у меня с id получилось так:
<offer id="<?php print $row['sku']; ?>" available="<?php print $row['field_available']; ?>">
но вот не знаю как побороть еще пару косяков
1. если в views отключить вывод sku и available, php их тоже не выводит, а с включенными полями идет дубль и у маркета ошибка
<id>17001</id>
<available>false</available>
2. как убрать 00 у цены? commerce
«2. как убрать 00 у цены? commerce»
кастомный хук можно запилить, в котором указать количество цифр после точки = 0
либо использовать https://www.drupal.org/project/commerce_extra_price_formatters