Magento'da birden fazla ürünü silme


12

SKU ile filtreleyerek birden fazla ürünü silmenin bir yolu var mı? Silmek istediğim yaklaşık 1000 ürünüm var.

Yanıtlar:


17

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.


5
bundan sonra reindex unutma (düz ürün kataloğu kullanıyorsanız)
Vladimir Kerkhoff

2
Temel olarak Yönetici İçe / Dışa Aktarma aracı toplu silmeleri gerçekleştirmek için kullanırken bunu yapar. Arama ile karşılaştırıldığında son derece hızlıdır, ->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).
STW

@STW. Güzel yakalayış. Değerlendirmeleri ve derecelendirmeleri tamamen unuttum.
Marius

İyi bir fikir olup olmadığından emin değilim. Elev tablolarına kaydedilen özellik verileri ne olacak? bunlar da silindi mi?
Anurag Patbandha

@AnuragPatbandha. tüm catalog_product_entity_*tablolar entity_idsahada bir FK var catalog_product_entity.entity_id. Güzel bir şekilde basamaklandırmalılar.
Marius

15

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!


2
genellikle doğrudan DB etkileşiminden kaçınmanın en iyisi olduğunu kabul ediyorum; ancak Magento aslında bu ürünleri Yönetici İçe Aktarma aracıyla siler (bkz. Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts())
STW

Seçilen mağazadan ürünleri silmek istersem, CSV biçimim nedir?
zus

Yalnızca seçili bir mağazadaki ürünlerin atamasını kaldırmak, ancak veritabanından kaldırmak istemiyorsanız, iki sütunlu bir CSV içe aktarmayı deneyebilirsiniz: sku ve mağaza, mağaza sütununda yalnızca ürünün atanmasını istediğiniz mağaza kimliklerini içerdiğinden emin olun , Davranışı İçe Aktar: güncelleme'yi seçin ve içe aktarın. Bunu test etmedim, bu yüzden dikkatli olun! (Zaman bulursam bunu daha sonra test edeceğim ve başka bir yorum ekleyeceğim)
Doug McLean

6

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";

3

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.

sku filtresi

Ardından SKU'ya göre filtreledikten sonra, silmek istediğiniz tüm öğeleri seçmek için sol taraftaki onay kutularını kullanabilirsiniz.

çoklu seçim

Dikkat select allkomple ızgara tüm öğeleri seçer ve hangi select visiblesadece ı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.

toplu işlemi sil

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.


2
Ve Tümünü Seç dehşet verici verimlilikle çalışır. Herhangi bir arama kısıtlaması olmadan yanlışlıkla seçilmesi, ürün kataloğunuzdaki her şeyi gerçekten siler ve bir kez başlatıldığında, sunucuyu öldürmek veya silme sırasında belleğin tükenmesi onu durduran tek şeydir.
Fiasco Labs

3

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.


1

Çünkü liste tabloları

  • catalog_product_entity_varchar,
  • catalog_product_entity_tier_price,
  • catalog_product_entity_media_gallery,
  • catalog_product_entity_media_gallery_value,
  • catalog_product_entity_text,
  • catalog_product_entity_group_price,
  • catalog_product_entity_datetime,
  • catalog_product_entity_decimal,
  • catalog_product_entity_int
  • catalog_category_product
  • catalog_product_link

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.