Обновление цен на сайте ModX с помомщью API и CSV

Можно указать что ищем ресурсы по ТВ, т.к. в инете почти нет этой инфы

Вкратце:
делаем такой чанк (FormCSV)

[[!loadCSVfile]]
<!-- Тип кодирования данных, enctype, ДОЛЖЕН БЫТЬ указан ИМЕННО так -->
<form enctype="multipart/form-data" action="" method="POST">
    <!-- Поле MAX_FILE_SIZE должно быть указано до поля загрузки файла -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" /><br>
    <!-- Название элемента input определяет имя в массиве $_FILES -->
   <input name="userfile" type="file" /><br>
    <input type="submit" value="Запустить обновление" />
</form>


А после делаем такой сниппет

<?php
// Загрузка цен в БД
if(!empty($_FILES))
{
    $uploadfile = '/var/www/instrumenti/www/assets/userfiles/' .time(). basename($_FILES['userfile']['name']);


    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {

        $row = 1;
        //articul; name; price
        $handle = fopen($uploadfile, "r");
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
            if($row != 1 )
            {
                $art = trim($data[0]);
                $price = (int) str_replace(" ","",$data[2]);
                
                $where = $modx->newQuery('modResource');
                $where->leftJoin('modTemplateVarResource', 'TemplateVarResources');
                $where->leftJoin('modTemplateVar', 'tv', "tv.id=TemplateVarResources.tmplvarid");
                $where->limit(5);// Лимит
                $where->where(array(
                    array(
                        'tv.name'   => 'sku', // Имя TV
                        'TemplateVarResources.value'    => $art,// Значение TV
                    )
                ));
                $resources = $modx->getCollection('modResource',$where);
                if(!empty($resources))
                {
                    foreach ($resources as $id => $res) {
                        if($id)
                        {
                            //echo "<p>".$res->get('id')."</p>";
                            $res->setTVValue('price', $price);
                            $res->save();
                            echo "<p>Обновлена цена для артикула $art ($price р.)</p>";
                        }
                    }
                }
            }
            $row++;
        }

    } else {
        echo "Error!\n";
    }
}

Возврат к списку


Текст сообщения*
Защита от автоматических сообщений