Как удалить все товары и опции
Сделал импорт нескольких тысяч товаров из внешнего файла. Хочу все переделать и перезалить товары. Пытаюсь удалить товары стандартным способом, как ресурсы. Товары и каталоги удаляются (т.е. становятся красными), но очистить их не получается. Модх просто не реагирует.
Оптимальным кажется вариант удаления товаров через phpMyAdmin. Вопрос в том какие таблицы нужно почистить, чтобы потом ничего не поломалось.
Оптимальным кажется вариант удаления товаров через phpMyAdmin. Вопрос в том какие таблицы нужно почистить, чтобы потом ничего не поломалось.
Комментарии: 6
Лучше все-таки удалять средствами самого MODX, так как как правило нужные зависимости прописаны и связанные объекты удаляются автоматом. В phpMyAdmin вы можете просто пропустить связанные объекты.
Ваша проблема сейчас связана с тем, что MODX просто не может получить весь объем документов из-за нехватки времени и/или памяти.
Сделайте так: в консоли пропишите такой код:
Не забывайте предварительно сделать бэкап базы данных.
Ваша проблема сейчас связана с тем, что 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 />Удалено";
Выполняйте, пока не будут удалены все документы. Лимит сами скорректируйте исходя из того, как быстро будет выполняться скрипт.Не забывайте предварительно сделать бэкап базы данных.
Спасибо, огромное
Пожалуйста.
Немного доработанная версия. Чтобы не запускать скрипт по несколько раз. Оставлю здесь для себя. Может еще кому-то пригодится.
Перед использованием нужно заменить параметр parent.
Перед использованием нужно заменить параметр 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";
msPre удаляет/уничтожает то количество которое влезет на страницу.
Тестировался на 100к товаров. Удаляет 1000 товаров за 20 минут.
Можно выборочно отметить нужные товаров в нужных категориях.
Тестировался на 100к товаров. Удаляет 1000 товаров за 20 минут.
Можно выборочно отметить нужные товаров в нужных категориях.
Добрый день, Андрей!
Скажи пакет удаляет товары вместе с файлами картинок и записи подчищает или стандартным образом?
Скажи пакет удаляет товары вместе с файлами картинок и записи подчищает или стандартным образом?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.