Risposte:
Il modo più veloce per farlo è eseguire direttamente questa query.
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
Tutto dovrebbe cascata bene. i valori degli attributi verranno eliminati, le relazioni di categoria verranno eliminate, i upsell, i crosssell e relativi e così via.
[EDIT]
C'è un problema in questo. Grazie a STW per averlo individuato. Le recensioni e le valutazioni rimarranno orfane perché non esiste una chiave esterna per la tabella dei prodotti.
->delete()
ma eviterà qualsiasi codice in ascolto per eventi. Disponibile Magento sembra che le recensioni e le valutazioni siano orfane (non saranno cancellate quando il loro prodotto associato è).
catalog_product_entity_*
tabelle hanno un FK sul entity_id
campo verso il catalog_product_entity.entity_id
campo. Dovrebbero cascata bene.
Tutto il dovuto rispetto per Marius, ma per favore non interagire direttamente con il database se è assolutamente evitabile. Forse le tabelle correlate verranno aggiornate automaticamente, se la tua versione di Magento e tutte le tue estensioni sono prive di bug in tutti i posti giusti. Ma se non lo sono, questo genere di cose può distruggere il tuo sito.
Invece, puoi usare la funzione di importazione CSV di Magento.
Elenca i tuoi SKU in un file, semplice come:
sku
ABC1
ABC2
ABC3
...eccetera. Quindi salva come file CSV.
Quindi, in Sistema> Importa / Esporta> Importa, selezionare Tipo di entità: Prodotti e comportamento di importazione: Elimina entità e importare questo file. E questo è tutto!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
Puoi farlo a livello di codice. Crea un skustodelete.csv che elenca tutti gli skus da eliminare e successivamente ecco il codice per procedere ulteriormente
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";
Il modo del codice nessuno
Nella sezione admin sotto Manage Products
troverai una griglia con tutti i tuoi prodotti. C'è una colonna chiamata SKU
. Qui puoi filtrare i tuoi prodotti in base al valore.
Quindi, una volta filtrato per SKU, è possibile utilizzare le caselle di controllo sul lato sinistro per selezionare tutti gli elementi che si desidera eliminare.
Notare select all
che selezionerà tutti gli elementi nella griglia completa e select visible
che selezionerà solo gli elementi nella pagina corrente della griglia.
Dopo aver selezionato gli elementi desiderati, puoi utilizzare il pulsante di azione di massa nella parte in alto a destra della griglia e selezionare l'opzione di eliminazione.
Questo ti chiederà di assicurarti di voler eliminare questi elementi. Dopo aver selezionato Sì in questo pop-up, procederà all'eliminazione dei tuoi articoli. A seconda delle impostazioni dell'indice, potrebbe essere necessario eseguire un reindicizzazione dopo questo processo.
Kevin S, puoi eliminare il prodotto dal file csv. Segui semplicemente il passo fluttuante
Passo 1 :
Crea un file CSV e incolla gli skus che desideri eliminare dal sistema. Assegna il nome del file come skus.csv
Passo 2 :
Crea e sostituisci un file php nella tua directory principale. Quindi oltre il seguente codice
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 />";
}
}
}
Nota: prima di eseguire questo codice, ti ho raccomandato di ottenere il backup. Spero che ti sarà di aiuto.
Perché elenca le tabelle
sono chiavi esterne di catalog_product_entity.
Pertanto, quando si elimina un record in catalog_product_entity, verranno eliminati anche alcuni record delle tabelle precedenti.
Il codice (implementa la risposta di Marius) elimina tutti i prodotti che hanno 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);