Réponses:
La façon la plus rapide de le faire est d'exécuter cette requête directement.
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
Tout devrait bien jaillir. les valeurs d'attribut seront supprimées, les relations de catégorie seront supprimées, les ventes incitatives, les ventes croisées et connexes, etc.
[EDIT]
Il y a un hic à cela. Merci à STW d'avoir repéré cela. Les avis et notes resteront orphelins car il n'y a pas de clé étrangère dans le tableau des produits pour eux.
->delete()
mais esquivera tout code à l'écoute des événements. En stock Magento, il semble que les avis et les évaluations seront orphelins (ils ne seront pas supprimés lorsque leur produit associé le sera).
catalog_product_entity_*
tables ont un FK sur le entity_id
terrain sur le catalog_product_entity.entity_id
terrain. Ils devraient bien cascade.
Tout le respect dû à Marius, mais s'il vous plaît n'interagissez pas directement avec la base de données si elle est évitable. Peut - être que les tableaux associés seront mis à jour automatiquement, si votre version de Magento et toutes vos extensions sont exemptes de bogues aux bons endroits. Mais s'ils ne le sont pas, ce genre de chose peut détruire votre site.
Au lieu de cela, vous pouvez utiliser la propre fonction d'importation CSV de Magento.
Listez simplement vos références dans un fichier, aussi simple que:
sku
ABC1
ABC2
ABC3
...etc. Enregistrez ensuite en tant que fichier CSV.
Ensuite, dans Système> Importer / Exporter> Importer, sélectionnez Type d'entité: produits et comportement d'importation: supprimer les entités et importez ce fichier. Et c'est tout!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
Vous pouvez le faire par programme. Créez un skustodelete.csv répertoriant tous les skus à supprimer et après cela, voici le code pour continuer
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";
La méthode sans code
Dans la section d'administration sous Manage Products
trouverait une grille avec tous vos produits. Il y a une colonne appelée SKU
. Ici, vous pouvez filtrer vos produits en fonction de la valeur.
Ensuite, une fois que vous avez filtré par SKU, vous pouvez utiliser les cases à cocher sur le côté gauche pour sélectionner tous les éléments que vous souhaitez supprimer.
Remarquez select all
qui sélectionnera tous les éléments de la grille complète et select visible
qui ne sélectionnera que les éléments de la page actuelle de la grille.
Une fois que vous avez sélectionné les éléments que vous souhaitez, vous pouvez utiliser le bouton d'action de masse en haut à droite de la grille et sélectionner l'option de suppression.
Cela vous invitera à vous assurer de vouloir supprimer ces éléments. Après avoir sélectionné oui à ce pop-up, il supprimera vos éléments. En fonction de vos paramètres d'index, vous devrez peut-être exécuter une réindexation après ce processus.
Kevin S, vous pouvez supprimer le produit par fichier csv. Suivez simplement l'étape
Étape 1 :
Créez un fichier csv et passez les skus que vous souhaitez supprimer du système. Donnez le nom de fichier sous skus.csv
Étape 2 :
Créez et remplacez un fichier php dans votre répertoire racine. Ensuite, passez le code suivant
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 />";
}
}
}
Remarque: je vous ai recommandé avant d'exécuter ce code que vous devez obtenir la sauvegarde. J'espère que cela vous aidera.
Parce que lister les tableaux
sont des clés étrangères de catalog_product_entity.
Ainsi, lorsque vous supprimez un enregistrement dans catalog_product_entity, certains enregistrements des tables ci-dessus seront également supprimés.
Code (implémentez la réponse de Marius) supprimez tous les produits qui ont entity_id <= 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);