Можно указать что ищем ресурсы по ТВ, т.к. в инете почти нет этой инфы
Вкратце:
делаем такой чанк (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";
}
}