Сниппет для дружбы CatalogFill и Minishop2   Как перегнать ТV-параметры в поля Minishop2 MODx Revo

Задача: Перенести нужные 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 товаров в секунду.