Відповіді:
Найшвидший спосіб зробити це - запустити цей запит безпосередньо.
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
Все повинно красиво каскадувати. значення атрибутів буде видалено, відношення категорій буде видалено, розпродажів, перехресних продажів тощо і так далі.
[EDIT]
У цьому є улов. Завдяки STW за те, що помітили це. Огляди та рейтинги залишаться сиротами, оскільки немає стороннього ключа до таблиці продуктів для них.
->delete()
але ухилятиметься від прослуховування коду для подій. На складі Magento виявляється, що огляди та рейтинги будуть осиротілими (вони не будуть видалені, коли їх асоційований продукт).
catalog_product_entity_*
таблиці мають ФК на entity_id
полі до catalog_product_entity.entity_id
поля. Вони повинні красиво каскадувати.
З усією повагою ставитеся до Маріуса, але, будь ласка, не взаємодійте з базою даних безпосередньо, якщо її взагалі можна уникнути. Можливо, пов’язані таблиці будуть оновлені автоматично, якщо ваш випуск Magento та всі ваші розширення не будуть виправлені у всіх потрібних місцях. Але якщо їх немає, такі речі можуть зруйнувати ваш сайт.
Натомість ви можете використовувати власну функцію імпорту CSV Magento.
Просто перерахуйте свої SKU-файли у файлі, простому як:
sku
ABC1
ABC2
ABC3
... тощо. Потім збережіть як файл CSV.
Потім у системі> Імпорт / експорт> Імпорт виберіть Тип об'єкта: Продукти та поведінка імпорту: Видаліть об'єкти та імпортуйте цей файл. І це все!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
Ви можете це робити програмно. Створіть skustodelete.csv з переліком усіх скасів, які потрібно видалити, після чого ось код, щоб продовжити далі
require_once 'app/Mage.php';
Mage :: app("default")->setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID);
$skuAll = array();
$file_handle = fopen("skustodelete.csv", "r");
$catalog = Mage::getModel('catalog/product');
while (!feof($file_handle)) {
$line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];
$product = $catalog->loadByAttribute('sku', $allSku);
try {
$product->delete();
echo "Product with ID: " . $product->getId() . " Deleted Successfully". PHP_EOL;
} catch (Exception $e) {
echo "Product with ID: " . $product->getId() . "cannot be deleted" . PHP_EOL;
}
}
echo "Finish Delete";
Немає кодового способу
У розділі адміністратора внизу Manage Products
ви знайдете сітку з усіма вашими продуктами. Існує стовпчик, який називається SKU
. Тут ви можете фільтрувати свої продукти на основі вартості.
Після того, як ви відфільтрували SKU, ви можете використовувати прапорці в лівій частині, щоб вибрати всі елементи, які потрібно видалити.
Зауважте, select all
що буде виділено всі елементи в повній сітці та select visible
які будуть вибирати лише елементи на поточній сторінці сітки.
Вибравши потрібні елементи, ви можете скористатися кнопкою масових дій у верхній правій частині сітки та вибрати варіант видалення.
Це підкаже вас, щоб переконатися, що ви хочете видалити ці елементи. Вибравши "да" для цього спливаючого вікна, ви перейдете до видалення елементів. Залежно від налаштувань вашого індексу, можливо, вам доведеться запустити повторний індекс після цього процесу.
Кевін S, ви можете видалити продукт за допомогою CSV-файлу. Просто дотримуйтесь кроку підкачки
Крок 1 :
Створіть файл csv і пройдіть скус, який потрібно видалити з системи. Дайте ім'я файлу як skus.csv
Крок 2:
Створіть та замініть файл php у вашому кореневому каталозі. Потім пройдіть наступний код
require_once '../app/Mage.php';
Mage :: app("default") -> setCurrentStore( Mage_Core_Model_App :: ADMIN_STORE_ID );
$skuAll =array();
$file_handle = fopen("skus.csv", "r");
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];
}
$products = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter(
'sku', array('in' => $allSku)
)
->load();
if(is_array($products))
{
foreach ($products as $key => $pId)
{
try
{
$product = Mage::getModel('catalog/product')->load($pId)->delete();
echo "successfully deleted product with ID: ". $pId ."<br />";
}
catch (Exception $e)
{
echo "Could not delete product with ID: ". $pId ."<br />";
}
}
}
Примітка: я рекомендував вам перед запуском цього коду, ви повинні отримати резервну копію. Я сподіваюся, що це допоможе вам.
Тому що список таблиць
є зовнішніми ключами каталогу_product_entity.
Тож коли ви видаляєте запис у catalog_product_entity, деякі записи з вищевказаних таблиць також будуть видалені.
Код (реалізуйте відповідь Маріуса) видаліть увесь продукт, у якого entityid <= 18069:
$adapter = $setup->getConnection("catalog_write");
$where = array(
'entity_id <= ?' => '18069'
);
$tableCatalogProduct = Mage::getModel("catalog/product")->getResource()->getEntityTable();
$adapter->delete($tableCatalogProduct, $where);
$tableRating = Mage::getModel("rating/rating")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);
$tableRating = Mage::getModel("review/review")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);