Magento - Mevcut Yapılandırılabilir Ürünlere Özellik Ekle / Kaldır


18

Doğru yordam nedir - ürünü silmek ve mevcut yapılandırılabilir ürünlere öznitelik eklemek veya kaldırmak için yeniden başlamak yerine.

Yapılandırılabilir bir ürün oluştururken, ürün için hangi niteliklerin kullanılacağını seçmeniz istenir.

Şimdi başlangıçta seçilen bazı öznitelikleri kaldırmak için gereken bir çok ürün var ve bazı başlangıçta seçilmemiş bir öznitelik ekleme gerekir.

Bu konuda herhangi bir yardım takdir edilmektedir - ürünleri silmek bu konuda en iyi yaklaşım gibi görünmemektedir. Özellikle ürünlerle ilişkili birçok şey olduğu için.


Burada doğru cevap: ürünü silin ve yeni bir tane oluşturun, ancak bu sorun için çözümler var (ve modülleri düşünüyorum) ama bence kendiniz google yapabilirsiniz, bunun için bir çözümüm yok
Fabian Blechschmidt

Bunun için bir çözüm buldunuz mu? Aşağıdaki çözüm çözüm mü? Lütfen bir güncelleme yapın.
philwinkle

Henüz denemedim. Ama bunu çok yakında test edeceğim.
Yanıtladığınız

Bir renk niteliğine sahip olduğum ve tüm yapılandırılabilir ürünle bağlantılı olduğu gibi.Bu özellik silindi. Böylece bu bağlantılı özelliği bulamıyor ve "Uyarı: Tanımsız ofset: 0 /home/not1son/public_html/vendor/magento/module-configure-product/model/Product/Type/VariationMatrix.php içinde 0" 43" . Bu durumla başa çıkmak için yardıma ihtiyacınız var.
Bhagyashree

Yanıtlar:


14

Yapılandırılabilir üründen bir özelliği kaldırmak için benim için hangi dikişler işleyecek.
Bu senaryo.
Yapılandırılabilir tüm brandürünler, yaklaşık 200 basit ilişkili ürüne sahip yaklaşık 50 yapılandırılabilir ürün için yapılandırılabilir bir özellik olarak yanlış oluşturuldu .
Yapılandırılabilir bir özellikle ilişkili tüm basit ürünler aynı markaya sahiptir. Fikir, brandyapılandırılabilir niteliklerden kaldırmak ve onu, basit ürünlerden birinin değeri ile yapılandırılabilir ürüne basit bir özellik olarak atamaktır.
İşte bunu yapan kod. Kod yalnızca bir kez çalıştırılır. Bir yükseltme komut dosyasına veya basit bir php dosyasına eklenebilir.

<?php
//==>this is required only if you use a simple php file
error_reporting(E_ALL | E_STRICT);
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
umask(0);
Mage::app();
//<==

$brand = 'brand';
//get the attribute instance
$brandAttribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $brand);
//if this attribute exists
if ($brandAttribute->getId()){
    //make the attribute apply to al types of products in case it's not
    $brandAttribute->setApplyTo(null);
    $brandAttribute->save();
    $resource = Mage::getSingleton('core/resource');
    //get an object with access to direct queries
    $connection = $resource->getConnection('core_write');
    //get all configurable products - you can specify additional filters here
    $collection = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToFilter('type_id', 'configurable');
    foreach ($collection as $product){
        //the configurable attributes are stored in the table 'catalog_product_super_attribute'
        //remove the attribute references from that table. 
        //The constraints will take care of the cleanup.
        $q = "DELETE FROM {$resource->getTableName('catalog_product_super_attribute')}
            WHERE attribute_id = {$brandAttribute->getId()} AND product_id = {$product->getId()}";
        $connection->query($q);
        //get the simple products in the configurable product
        $usedProducts =  $product->getTypeInstance(true)->getUsedProducts(null, $product);
        foreach ($usedProducts as $p){
            //identify the first simple product that has a value for brand 
            //set that value to the configurable product.
            if ($brandValue = $p->getData($brand)){
                Mage::getSingleton('catalog/product_action')
                    ->updateAttributes(array($product->getId()), array($brand=>$brandValue), 0);
                break;
            }
        }
    }
}

Yukarıda listelenen numaralar için, yerel makinemde çalışması yaklaşık 15 saniye sürdü (güçlü değil). Eminim bu optimize edilebilir. Büyük olasılıkla branddeğeri elde etmek için yapılandırılabilir bir ürünün tüm basit ürünlerini almaya gerek yoktur , ama rahatsız etmedim.


2
Bu şekilde yapılması gerektiğinden nefret ediyorum ve aynı şeyi başarmak için bir yöntem yok ama bilgi için teşekkürler.
webnoob

@Marius, bu 1.9 için çalışacak mı?
Magento Öğrenci

@MagentoLearner. Emin değilim ama işe yarayan bir önsezim var.
Marius

@Marius, çok hızlı bir cevap !!! çok teşekkürler
Magento Öğrenci

@Marius, Farz edelim ki bir süper özellik eklemek istiyorum. Tabloya product_id ve attribute_id ile bir satır ekleyerek catalog_product_super_attributeçalışır mı? Yoksa diğer tabloları değiştirmem gerekiyor mu? Olduğu gibi stackoverflow.com/a/13381381/1749007
Magento Learner

5

Bu, veritabanının doğrudan düzenlenmesini gerektirir ve Magento'nun ilk yasası , veritabanını doğrudan düzenlememektir .

Ancak devam etmek için yeterince deliyseniz, bu birkaç ay önce StackOverflow'da ele alındı:

fuarları. CE 1.6.2 aşağıdaki DB geçici çözüm kesmek test ettik ve çalışıyor gibi görünüyor:

  • Özellik oluştur
  • Uygun özellik kümesine sürükleyin
  • Db editörüne veya phpmyadmin'e gidin, 'catalog_eav_attribute' tablosuna gidin ve sonuncusuna bakın, 'öznitelik kimliğini' not edin, ayrıca ürün kimliğini not edin -> catalog_product_entity'ye gidin ve istediğiniz yapılandırılabilir ürünü arayın ve> varlık_kimliği -> ürün_kimliği
  • Catalog_product_super_attribute'a gidin ve product_id ve attribute_id ile yeni bir kayıt ekleyin, product_super_attribute_id'i not edin
  • Catalog_product_super_attribute_label sayfasına gidin ve product_super_attribute_id ile yeni bir özellik ekleyin ve yeni özelliğinizin değerini, yöneticiye özelliği eklerken kullandığınız 'Renk' veya 'Boyut' gibi ekleyin
  • Yöneticiye geri dönün ve yapılandırılabilir ürünü tıklayın, alt ürünlerinizden hiçbirinin yapılandırılabilir ürününüzle ilişkili olmadığını fark edeceksiniz.
  • Alt ürünlerden birini tıklayın ve uygun özellik değerini seçin, sku'yu da değiştirebilirsiniz.
  • Tüm alt ürünleri dışa aktarın ve yeni öznitelik ve sku değerlerini ekleyin, geri içe aktarın ve işiniz bitti veya veri akışını kullanmadan tüm yöneticiyi manuel olarak değiştirmeniz gerekebilir.

Kredi bilgileri: /programming/5658197/add-new-attribute-to-existing-configurable-product-magento

Test edilmedi - YMMV.


2

Bir süper ürün niteliğini (çağrıldıkları gibi) tüm yapılandırılabilir ürünlerden kaldırmak için, bu SQL sorgusunu veritabanında yürütebilirsiniz:

DELETE FROM catalog_product_super_attribute
WHERE attribute_id = <id>;

Burada, özellik_kodu ile ilgili olarak eav_attribute tablosunda saklanan özellik kimliği. Catalog_product_super_attribute tablosu ürünleri süper ürün özelliklerine bağlar. Orada yapılandırılabilir ürünler oluşturmak için özellikler ekleyebilir ve kaldırabilirsiniz.


1
Yalnızca belirli bir üründen süper ürün özelliğini kaldırmak için yukarıdaki SQL sorgusunu ürün kimliğine de filtre edecek şekilde genişletebilirsiniz DELETE FROM catalog_product_super_attribute WHERE attribute_id = <attribute_id> AND product_id = <product_id>;
Judder

0

Yapılandırılabilir ürünü açmak için kirli bir saldırı var, daha sonra yinelenen, eski ve yeni özniteliği seçin, çoğaltma SKU olmadan yapılır, ardından orijinal yapılandırılabilir ürünü ve basit ürünleri silin. Bundan sonra kopyalamak için aynı SKU'yu verebilirsiniz. O zaman sadece yeni basit ürünler yapmalısınız.

Bu kadar basit ürün yoksa hızlı bir çözüm.


Doğru bir cevap değil
Deepak Rai

0

Güncelleme modunda Free Magmi içe aktarma dışa aktarma aracını kullanarak bunu daha temiz yapmayı başardım. (sürümü kavrar)

Anahtar alanlarını dışa aktarın, basit ve yapılandırılabilir SKUS'da yapılandırılabilir nitelikleri belirtmek için configurable_attributes sütun ayarlarını değiştirin ve Magmi kullanarak yeniden içe aktarın

Eski bir Oracle Danışmanı olarak, özellikle Magento veri yapısı kadar karmaşık olan veritabanıyla uğraşmamayı kabul ediyorum - bunu yapmak için iyi test edilmiş bir araç kullanmak daha iyi.


0

Bir Özelliğin, Yapılandırılabilir Bir Ürünün "Yapılandırılabilir" özelliklerinden biri olmaktan kaldırılması gerekiyordu.

  • Yukarıdaki catalog_product_super_attribute ile ilgili referanslar doğruydu. Navicat veritabanı aracını kullanarak sırayla birkaç şey yaptım.

    Test için Attribute_Id değiştirildi, bu onu diğer ürünlerde kullanılan başka bir alana değiştirdi. (Söz konusu kayıt olduğunu doğruladı). Her halükarda, kayıt verilerinin tam setini yazdı (product_super_attribute_id, product_id, attribute_id, position)

    Sonunda kaydı hep birlikte sildik.

Hile yaptı. Ayrıca, bunu tekrar yapmam gerektiğini varsaydığımda ne yaptığımı da not ettim.

Tekrar: "catalog_product_super_attribute" içindeki Kaydı silmek, yukarıdaki diğerleri ile ilgili görünen sorunumu çözdü.

Ekstra Bilgi: "attribute_id" ifadesini doğru adlandırılmış listeyle ilişkilendirmek için şunu incelemek önemlidir: catalog_super_attribute_label -> ve product_super_attribute_id ile ilişkilendirin.
İlgili bir "attribute_id" alanı (henüz bulmak için) arıyordum.

"product_super_attribute_id", "attribute_id" ifadesinin gerçekte ne olduğunu söyleme konusunda hile yapar. (Yine de bir özniteliğin veritabanında ilk olarak nasıl tanımlandığını görmek için "attribute_id" için "varsayılan" veri kümesini bulmak istiyorum).

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.