Импорт из CSV не срабатывает правильно

Обновляю ресурсы скриптом для импорта bezumkin.ru/modx/minishop2/import/2309/.

1. Можно ли указывать в качестве ключа id ресурса?
2. Почему такой вызов создаёт новую строчку в базе, а не обновляет ресурс по id?
3. Почему не импортирует без pagetitle и без alias? (Решение дальше)

php ./core/components/minishop2/import/csv.php "core/import/ru.csv" "id,tv2,longtitle,description,tv1" 1 "id" 1 ";"
… решение дальше ..

UPD:
Решил проблему своим скриптом на основе скрипта для импорта. Обновляю напрямую только те поля, что мне нужны минуя процессоры. Не претендую на изящное решение, но костыль оказался рабочим.
Вылаживаю его код больше для себя, чтобы потом легче было найти:
<?php
ini_set("display_errors",1);
error_reporting(E_ALL);
header("Content-Type: text/html; charset=utf-8");

// Подключаем
define('MODX_API_MODE', true);
require 'index.php';

// Включаем обработку ошибок
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');



$file = 'import/ru.csv'; // имя файла
$delimeter = ';'; // разделитель

$handle = fopen($file, "r");
$rows = $updated = 0;
while (($csv = fgetcsv($handle, 0, $delimeter)) !== false) {
	$rows ++;
	
	// определяем в переменные столбцы из файла
	$id = $csv[0];
	$old_url = $csv[1]; // тв
	$longtitle = $csv[2];
	$description = $csv[3];
	$keywords = $csv[4]; // тв
	
    $s1="UPDATE modx_site_content SET longtitle='$longtitle', description='$description' where id ='$id'";
    if($modx->exec($s1)) {

	// устанавливаем тв-шки
    	$page = $modx->getObject('modResource', $id);
    	$page->setTVValue('keywords', $keywords);
    	$page->setTVValue('old-url', $old_url);

        $updated++;
    }
    
}
fclose($handle);


echo '<pre>';
echo "\nImport complete in ".number_format(microtime(true) - $modx->startTime, 7) . " s\n";
echo "\nTotal rows:	$rows\n";
echo "Updated:	$updated\n";
echo '</pre>';

UPD2:
Решил перенести статью в Готовые решения, т.к. я сам долго доходил до этого простого, но нужного кода!
А ещё нашел много похожих вопросов тут, типа почему не импортируется без алиасов и без pagetitle, а только по id.
Василий Столейков
22 июня 2015, 11:19
modx.pro
5
2 977
+2
Поблагодарить автора Отправить деньги

Комментарии: 9

Василий Столейков
22 июня 2015, 14:32
0
Хочу обновить данные из обычных ресурсов (не минишоповских). Может что-то ему не хватает?
    Василий Столейков
    22 июня 2015, 14:40
    0
    Или мне выгрузить все alias-ы и поставить их отдельной колонкой в csv и по алиасу обновлять? Правда пока не представляю себе как их выгрузить в том же порядке чтобы сопоставить строки…
      Василий Столейков
      22 июня 2015, 14:45
      0
      Отключил системный параметр automatic_alias, и посыпались ошибки типа:
      Error on create: alias: field_required
      Но почему он создаёт (create), если в параметре я ему чётко указываю что нужно обновлять (update=1)???
    Василий Столейков
    22 июня 2015, 15:38
    0
    Решил проблему своим скриптом на основе этого. Там я обновил нужные поля напрямую, минуя процессоры.
      Александр Толстенко
      13 июля 2015, 21:35
      0
      У меня два вопроса:

      1. как быть с новыми товарами? лучше пользоваться стандартным импортом наверное.
      2. Как импортировать товар в 2 категории? (есть parent и есть дерево tree)
        Василий Столейков
        14 июля 2015, 09:09
        0
        1. Да, лучше стандартным импортом
        2. Думаю да
          Игорь Улькин
          14 июля 2015, 15:39
          +1
          2. предложенный выше вариант не работает (

          в базе данных нужная нам таблица — modx_ms2_product_categories
          и нам нужен столбец — category_id

          через строку импорта
          ...&fields=pagetitle,id,category_id....
          у меня не получилось, но через импорт в таблицу MySQL работает. Вот пример для id 234. Добавляем еще одну мультикатегорию с id 35

          БЫЛО
          INSERT INTO `modx_ms2_product_categories` (`product_id`, `category_id`) VALUES
          (234, 7),
          (234, 185),
          (234, 208),
          (234, 210);
          СТАЛО
          INSERT INTO `modx_ms2_product_categories` (`product_id`, `category_id`) VALUES
          (234, 7),
          (234, 35),
          (234, 185),
          (234, 208),
          (234, 210);
          При импорте в БД только новое значение:
          INSERT INTO `modx_ms2_product_categories` (`product_id`, `category_id`) VALUES
          (234, 35);
          Ничего умнее я пока не придумал. Если у вас получиться с импортом CSV, дайте знать.

          p.s. знатоки php и mysql наверное читаю и думают: «вот дебилы… учите матчасть ;)))»
          Александр
          03 мая 2023, 12:29
          0
          Подскажите, пожалуйста, есть ли необходимость в пошаговой обработке данным скриптом, если ресурсов, например, более 1000?
            Stepan
            03 мая 2023, 13:35
            0
            даже если больше 200
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          9