Задача: Перенести нужные TV-значения ресурсов(товаров) в поля для Minishop2
То есть сначала импортируем товары при помощи CatalogFill, а потом обрабатываем ресурсы, которые являются товарами.
Этап №1
Подготовка файла конфигурации импорта для CatalogFill, он обычно лежит в папке config внутри папки с компонентом, его можно редактировать из админки.
Для того чтобы при импорте ресурсы принимали тип товара, в конфигурации импорта нужно class_key задать значение msProduct.
$cf_config['imp_content_default'] = array( 'content' => array( 'template' => 4, 'class_key' => 'msProduct', ), );
Этап №2
После того, как импортировали или обновили каталог, запускаем ниже приведённый сниппет.
В нашем случае нужные поля это: цена, картинка, артикул, вес.
Сниппет выбирает идентификаторы товаров в массив, далее, используя этот массив, мы в цикле обновляем поля товара на значения из TV-параметров.
Код ниже можно просто запускать из Console подставив свои значения.
<?php $output = $modx->runSnippet('pdoResources',array( 'parents' => 1, //ID каталога 'where'=> '{"class_key":"msProduct"}', 'limit'=>0, 'returnIds'=>1 )); $arr = explode(',', $output); foreach($arr as $id){ $product = $modx->getObject('msProduct', $id); $image = $product->getTVValue('image_0'); $price = $product->getTVValue('price_0'); $article = $product->getTVValue('article_0'); $weight = $product->getTVValue('weight_0'); $product->set('image', $image); $product->set('thumb', $image); $product->set('price', $price); $product->set('article', $article); $product->set('weight', $weight); $product->save(); } $cm = $modx->getCacheManager(); $cm->refresh();
Данный скрипт обрабатывает, примерно, 100 товаров в секунду.