Импорт товаров с опциями из CSV minishop2

Пример кода импорта товара minishop2 со свойствами и опциям

// Путь к CSV файлу
$csvFile = $_SERVER["DOCUMENT_ROOT"] . "/csvimport.csv";

// Id шаблона товара
$productTemplateId = 6;

// Чтение CSV файла
if (($handle = fopen($csvFile, "r")) !== FALSE) {
	// Пропускаем заголовок
	$header = fgetcsv($handle, 1000, ";");

	while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
		$categoryId = $data[0];
		$name = $data[1];
		$price = $data[2];
		$vendorName = $data[3];

		// Опция товара, созданная пользователем.
		$diametr = $data[4];

		if ($category = $modx->getObject('modResource', $categoryId)) {
			$newProduct = $modx->newObject('msProduct');
			$newProduct->set('template', $productTemplateId);
			$newProduct->set('parent', $categoryId);
			$newProduct->set('pagetitle', $name);
			$newProduct->set('price', $price);

			if (!$vendor = $modx->getObject('msVendor', array('name' => $vendorName))) {
				$vendor = $modx->newObject('msVendor', array('name' => $vendorName));
				$vendor->save();
			}

			$newProduct->set('vendor', $vendor->get('id'));

			$newProduct->set('published', 1);

			// Задаем alias товару
			$alias = $newProduct->cleanAlias($name);
			$newProduct->set('alias', $alias);

			// Сохраняем товар
			$newProduct->save();

			// Устанавливаем опции
			$options = [];

			if ($diametr) {
				$diametr_arr = explode(' ', $diametr);

				foreach ($diametr_arr as $di) {
					if (!empty($di)) {
						$options['diametr'][] = $di;
					}
				}

				if (!empty($options)) {
					foreach ($options as $k => $v) {
						if (is_array($v)) {
							$options[$k] = array_map('trim', $options[$k]);
							$options[$k] = array_keys(array_flip($options[$k]));
							$options[$k] = array_filter($options[$k]);
						} else {
							$options[$k] = trim($options[$k]);
						}
						$newProduct->set($k, $options[$k]);
					}
					$newProduct->set('options', $options);
					$newProduct->save();
				}
			}
		}
	}
}