Как удалить все товары и опции

Сделал импорт нескольких тысяч товаров из внешнего файла. Хочу все переделать и перезалить товары. Пытаюсь удалить товары стандартным способом, как ресурсы. Товары и каталоги удаляются (т.е. становятся красными), но очистить их не получается. Модх просто не реагирует.

Оптимальным кажется вариант удаления товаров через phpMyAdmin. Вопрос в том какие таблицы нужно почистить, чтобы потом ничего не поломалось.
Алексей П
30 ноября 2016, 17:16
modx.pro
7
5 142
0

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

Fi1osof
01 декабря 2016, 16:53
1
+1
Лучше все-таки удалять средствами самого MODX, так как как правило нужные зависимости прописаны и связанные объекты удаляются автоматом. В phpMyAdmin вы можете просто пропустить связанные объекты.
Ваша проблема сейчас связана с тем, что MODX просто не может получить весь объем документов из-за нехватки времени и/или памяти.
Сделайте так: в консоли пропишите такой код:

ini_set("max_execution_time", 0);
ignore_user_abort(true);

$q = $modx->newQuery("modResource", array(
	"deleted"	=> 1,
));

print "<br />Документов на удаление: " . $modx->getCount("modResource", $q);

$q->limit(10);

foreach($modx->getIterator("modResource", $q) as $doc){
	$doc->remove();
}

print "<br />Удалено";
Выполняйте, пока не будут удалены все документы. Лимит сами скорректируйте исходя из того, как быстро будет выполняться скрипт.

Не забывайте предварительно сделать бэкап базы данных.
    Алексей П
    15 декабря 2016, 21:58
    0
    Спасибо, огромное
      Fi1osof
      15 декабря 2016, 22:10
      +1
      Пожалуйста.
    Алексей П
    04 ноября 2017, 23:57
    7
    +3
    Немного доработанная версия. Чтобы не запускать скрипт по несколько раз. Оставлю здесь для себя. Может еще кому-то пригодится.
    Перед использованием нужно заменить параметр parent.

    <?php
    $step = 10;
    $offset = isset($_SESSION['galgenoffset']) && $_SESSION['galgenoffset'] ? $_SESSION['galgenoffset'] : 0;
    $modx->setLogLevel(MODX_LOG_LEVEL_ERROR);
    $q = $modx->newQuery('modResource', array('parent' => 6007));
    $total = $modx->getCount("modResource", $q);
    $q->limit($step,$offset);
    foreach($modx->getIterator("modResource", $q) as $doc){
    	$doc->remove();
    }
    
    $_SESSION['galgenoffset'] = $offset + $step;
    if ($_SESSION['galgenoffset'] >= $total) {
      $sucsess = 100;
      $_SESSION['Console']['completed'] = true;
      unset($_SESSION['galgenoffset']);
    } else {
      $sucsess = round($_SESSION['galgenoffset'] / $total, 2) * 100;
      $_SESSION['Console']['completed'] = false;
    }
    for ($i=0; $i<=100; $i++) {
        if ($i <= $sucsess) {
            print '=';
        } else {
            print '_';
        }
    }
    $current = $_SESSION['galgenoffset'] ?
               $_SESSION['galgenoffset'] :
               ($sucsess == 100 ? $total : 0);
    print "\n";
    print $sucsess.'% ('.$current.')'."\n\n";
      Андрей Степаненко
      05 февраля 2019, 17:55
      0
      msPre удаляет/уничтожает то количество которое влезет на страницу.
      Тестировался на 100к товаров. Удаляет 1000 товаров за 20 минут.
      Можно выборочно отметить нужные товаров в нужных категориях.
        Юрий
        14 апреля 2021, 13:49
        0
        Добрый день, Андрей!
        Скажи пакет удаляет товары вместе с файлами картинок и записи подчищает или стандартным образом?
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6