Как удалить товары с определенным значением tv
Задача в том, что бы удалить товары в которых tv поле (производитель) имеет определенное значение
я так понимаю это только через консоль можно запустить скрипт, но не пойму как его написать, так как в php не силен
наткнулся на эту заметку
https://modx.pro/help/22639
но как подстроить под свою задачу — не понятно мне
я так понимаю это только через консоль можно запустить скрипт, но не пойму как его написать, так как в php не силен
наткнулся на эту заметку
https://modx.pro/help/22639
но как подстроить под свою задачу — не понятно мне
Комментарии: 4
Что-то типа этого (бэкап базы только сделайте):
<?php
$tvid = 123; // ID TV-шки
$vendor = 'Производитель' // Название производителя
$template = 6; // ID шаблона товара
$sql = "SELECT * FROM {$modx->getTableName('modTemplateVarResource')} WHERE tmplvarid = {$tvid}";
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);
foreach($tvs as $tv) {
if($tv['value'] != $vendor) continue; // если название не то, пропускаем
if(!$resource = $modx->getObject('modResource', array('id' => $tv['contentid'], 'template' => $template)) continue; // если нет ресурса с таким ID и шаблоном, пропускаем
$resource->remove(); // удаляем ресурс
}
добрый день, спасибо за ответ, а проблема с изображениями в галерее тоже будет как здесь https://modx.pro/help/22639
что они не удаляются?
что они не удаляются?
Да, естественно. Можно добавить в скрипт:
<?php
$tvid = 123; // ID TV-шки
$vendor = 'Производитель' // Название производителя
$template = 6; // ID шаблона товара
if(!function_exists('removeDirectory')){
function removeDirectory($dir){
if ($objs = glob($dir."/*")) {
foreach($objs as $obj) {
is_dir($obj) ? removeDirectory($obj) : unlink($obj);
}
}
rmdir($dir);
}
}
$sql = "SELECT * FROM {$modx->getTableName('modTemplateVarResource')} WHERE tmplvarid = {$tvid}";
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);
foreach($tvs as $tv) {
if($tv['value'] != $vendor) continue; // если название не то, пропускаем
if(!$resource = $modx->getObject('modResource', array('id' => $tv['contentid'], 'template' => $template)) continue; // если нет ресурса с таким ID и шаблоном, пропускаем
$dir = MODX_ASSETS_PATH.'images/products/'.$tv['contentid'].'/';
removeDirectory($dir);
$resource->remove(); // удаляем ресурс
}
спасибо, буду пробовать
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.