Yanıtlar:
Bunu yapmanın en hızlı yolu bu sorguyu doğrudan çalıştırmaktır.
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
Her şey güzel bir şekilde basamaklandırılmalıdır. özellik değerleri silinecek, kategori ilişkileri silinecek, satışlar, çapraz satışlar vb.
[EDIT]
Bunu yakala. Bunu tespit ettiği için STW'ye teşekkürler. İncelemeler ve derecelendirmeler yetim olarak kalacaktır, çünkü onlar için ürünler tablosunda yabancı bir anahtar yoktur.
->delete()
ancak olayları dinleyen herhangi bir kodu atlatacaktır. Stokta Magento, incelemelerin ve derecelendirmelerin yetim kaldığı görülüyor (ilişkili ürünleri olduğunda silinmeyecekler).
catalog_product_entity_*
tablolar entity_id
sahada bir FK var catalog_product_entity.entity_id
. Güzel bir şekilde basamaklandırmalılar.
Tüm Marius için saygı duyuyoruz, ancak kaçınılmazsa lütfen doğrudan veritabanıyla etkileşim kurmayın. Magento sürümünüz ve tüm uzantılarınız doğru yerlerde hatasızsa, belki ilgili tablolar otomatik olarak güncellenecektir. Ancak eğer böyle değilse, bu tür şeyler sitenizi yok edebilir.
Bunun yerine Magento'nun kendi CSV içe aktarma özelliğini kullanabilirsiniz.
SKU'larınızı aşağıdaki gibi basit bir dosyada listeleyin:
sku
ABC1
ABC2
ABC3
...vb. Sonra bir CSV dosyası olarak kaydedin.
Ardından, Sistem> İçe / Dışa Aktar> İçe Aktar'da Varlık Türü: Ürünler ve İçe Aktarma Davranışı: Varlıkları Sil'i seçin ve bu dosyayı içe aktarın. Ve bu kadar!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
Programlı olarak yapabilirsiniz. Silinecek tüm skusları listeleyen bir skustodelete.csv oluşturun ve bundan sonra devam etmek için kod
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";
Hiçbiri kod yolu
Yönetici bölümünde Manage Products
, tüm ürünlerinizle birlikte bir ızgara bulacaksınız. Adında bir sütun var SKU
. Burada ürünlerinizi değere göre filtreleyebilirsiniz.
Ardından SKU'ya göre filtreledikten sonra, silmek istediğiniz tüm öğeleri seçmek için sol taraftaki onay kutularını kullanabilirsiniz.
Dikkat select all
komple ızgara tüm öğeleri seçer ve hangi select visible
sadece ızgara geçerli sayfadaki öğeleri seçmek hangi.
İstediğiniz öğeleri seçtikten sonra, ızgaranın sağ üst tarafındaki toplu işlem düğmesini kullanabilir ve silme seçeneğini belirleyebilirsiniz.
Bu, bu öğeleri silmek istediğinizden emin olmanızı ister. Bu pop-up'a evet'i seçtikten sonra öğelerinizi silmeye devam edecektir. Dizin ayarlarınıza bağlı olarak, bu işlemden sonra bir yeniden dizin çalıştırmanız gerekebilir.
Kevin S, ürünü csv dosyası ile silebilirsiniz. Sadece dalgalı adımı takip et
Aşama 1 :
Bir csv dosyası oluşturun ve sistemden silmek istediğiniz skus'u geçin. Dosya adını skus.csv olarak verin
Adım 2 :
Kök dizininizde bir php dosyası oluşturun ve değiştirin. Sonra aşağıdaki kodu geç
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 />";
}
}
}
Not: Bu kodu çalıştırmadan önce size tavsiye ettim, yedeklemeyi almalısınız. Umarım bu size yardımcı olacaktır.
Çünkü liste tabloları
catalog_product_entity anahtarlarıdır.
Dolayısıyla catalog_product_entity içindeki bir kaydı sildiğinizde, yukarıdaki tabloların bazı kayıtları da silinecektir.
Kod (Marius yanıtını uygula) entity_id <= 18069 olan tüm ürünleri sil:
$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);