Тестировалось на версии WASS 302.
Программа 1C выгружает файл в таком виде (ниже фрагмент файла), т.е. для корневой категории указан ID родителя равный "00000000-0000-0000-0000-000000000000".
Код: Выделить всё
<Группы>
<Группа>
<Ид>bd72d90d-55bc-11d9-848a-00112f43529a</Ид>
<Родитель>00000000-0000-0000-0000-000000000000</Родитель>
<Наименование>Обувь</Наименование>
</Группа>
<Группа>
<Ид>bd72d90e-55bc-11d9-848a-00112f43529a</Ид>
<Родитель>bd72d90d-55bc-11d9-848a-00112f43529a</Родитель>
<Наименование>Женская обувь</Наименование>
</Группа>
<Группа>
<Ид>dee6e186-55bc-11d9-848a-00112f43529a</Ид>
<Родитель>bd72d90d-55bc-11d9-848a-00112f43529a</Родитель>
<Наименование>Мужская обувь</Наименование>
</Группа>
</Группы>
Импортируем этот файл XML через раздел администрирования магазина «Инструменты > 1С», пункт "Импорт в магазин (1С > Shop-Script)".
После импорта не отображаются категории. В базе данных, в таблице "SC_categories" есть все три категории "Обувь", "Женская обувь", "Мужская обувь", но при этом код родительской категории у "Обувь" равен нулю, а должен быть равен 1, т.к. уникальный числовой код категории "Корень" равен 1.
Проблема парсинга CommerceML обнаружена в файле /published/SC/html/scripts/classes/class.parser1cxml.php
Фрагмент кода:
Код: Выделить всё
if ( isset($element->Родитель) ) {
$parent_uuid = (string)$element->Родитель;
if ( !empty( $parent_uuid ) ) {
$parent = (int)$categoryMap[(string)$element->Родитель];
}
else {
$categoryEntry->categoryID = 1;
}
}
Логика работы следующая:
Если в файле XML указан атрибут "Родитель" и значение его не пустое, тогда получаем числовой код родительской категории.
Если код кодительской категории равен "00000000-0000-0000-0000-000000000000", тогда переменная $parent будет равна нулю, что противоречит принципу работы WASS, т.к. не может быть родительских категорий равных нулю, могут быть только равным 1, т.е. коду категории "Корень".
Корректировка в классе class.parser1cxml.php, дополнительная проверка на код родительской категории равной нулю
Код: Выделить всё
if ( isset($element->Родитель) ) {
$parent_uuid = (string)$element->Родитель;
if ( !empty( $parent_uuid ) ) {
$parent = (int)$categoryMap[(string)$element->Родитель];
if ($parent == 0) {
$parent = 1;
}
}
else {
$categoryEntry->categoryID = 1;
}
}