Страница 1 из 1

webAsyst ShopScript импорт родит. категорий из CommerceML

Добавлено: 29 май 2011 18:16
TechAdmin
Проблема обработки корневых категорий и значения в поле "Родитель".
Тестировалось на версии 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;
	}
}