Dropdown 2.12'de yapılandırılabilir ürün özelliği sıralama düzeni


9

Açılır listenin sırası, özelliğin kendisiyle aynı değildir. Özellik boyutu içinde Yenidoğan 0-3 ay sipariş var

ve açılır menüde 0-3 Yenidoğan olarak görünür

Yenidoğan büyüklüğü diğer boyutlardan birkaç gün sonra eklenmiştir ve yenidoğan basit ürünleri 0-3 ay sonra ithal edilmiştir. Özellik içinde listenin sırasını takip etmek için açılır listenin nasıl alınacağına dair herhangi bir öneriniz var mı? Önbelleği temizledim ve yeniden indeksledim. @Khoa TruongDinh'in de aynı sorunu yaşadığını ancak konuya bir çözüm görmediğini okudum, bu yüzden yeniden gönderiyorum.


Ayrıca, 0-3 boyutlu öznitelik ürünleri zaten var ve Yenidoğan büyüklüğündeki tüm öznitelik ürünlerini ekliyorum.
babywit

Yanıtlar:


14

Ön uçta aynı öznitelik seçenekleri sıralama sorunu ile karşılaştım, Bu sorunu kontrol ettiğimde ve öznitelik seçeneklerini getirirken Magento 2.1.2'de varsayılan olarak sorguya eklenen sıralama filtresi bulunmadığından, bu sorunu düzeltmek gerekiyor dosyaya 282 satırındaki getAttributeOptions işlevinde ORDER By işlevini eklemek için aşağıdaki kodu eklemek için: vendor / magento / module-configurable-product / Model / ResourceModel / Product / Type / Configurable.php Şimdi, benim için iyi çalışıyor.

->joinInner(
        ['attribute_opt' => $this->getTable('eav_attribute_option')],
        'attribute_opt.option_id = entity_value.value',
        []
    )->order(
        'attribute_opt.sort_order ASC'
    );

Kodu düzenleyemiyorsanız, lütfen bu getAttributeOptions işlevini aşağıdaki kodla değiştirin:

public function getAttributeOptions($superAttribute, $productId)
{
    $scope  = $this->getScopeResolver()->getScope();
    $select = $this->getConnection()->select()->from(
        ['super_attribute' => $this->getTable('catalog_product_super_attribute')],
        [
            'sku' => 'entity.sku',
            'product_id' => 'product_entity.entity_id',
            'attribute_code' => 'attribute.attribute_code',
            'value_index' => 'entity_value.value',
            'option_title' => $this->getConnection()->getIfNullSql(
                'option_value.value',
                'default_option_value.value'
            ),
            'default_title' => 'default_option_value.value',
        ]
    )->joinInner(
        ['product_entity' => $this->getTable('catalog_product_entity')],
        "product_entity.{$this->getProductEntityLinkField()} = super_attribute.product_id",
        []
    )->joinInner(
        ['product_link' => $this->getTable('catalog_product_super_link')],
        'product_link.parent_id = super_attribute.product_id',
        []
    )->joinInner(
        ['attribute' => $this->getTable('eav_attribute')],
        'attribute.attribute_id = super_attribute.attribute_id',
        []
    )->joinInner(
        ['entity' => $this->getTable('catalog_product_entity')],
        'entity.entity_id = product_link.product_id',
        []
    )->joinInner(
        ['entity_value' => $superAttribute->getBackendTable()],
        implode(
            ' AND ',
            [
                'entity_value.attribute_id = super_attribute.attribute_id',
                'entity_value.store_id = 0',
                "entity_value.{$this->getProductEntityLinkField()} = "
                . "entity.{$this->getProductEntityLinkField()}",
            ]
        ),
        []
    )->joinLeft(
        ['option_value' => $this->getTable('eav_attribute_option_value')],
        implode(
            ' AND ',
            [
                'option_value.option_id = entity_value.value',
                'option_value.store_id = ' . $scope->getId(),
            ]
        ),
        []
    )->joinLeft(
        ['default_option_value' => $this->getTable('eav_attribute_option_value')],
        implode(
            ' AND ',
            [
                'default_option_value.option_id = entity_value.value',
                'default_option_value.store_id = ' . \Magento\Store\Model\Store::DEFAULT_STORE_ID,
            ]
        ),
        []
    )->where(
        'super_attribute.product_id = ?',
        $productId
    )->where(
        'attribute.attribute_id = ?',
        $superAttribute->getAttributeId()
    )->joinInner(
        ['attribute_opt' => $this->getTable('eav_attribute_option')],
        'attribute_opt.option_id = entity_value.value',
        []
    )->order(
        'attribute_opt.sort_order ASC'
    );

    return $this->getConnection()->fetchAll($select);
}

Bunun için çok teşekkür ederim ama iyi php usta değilim. Düzeltmenize nereye ekleyeceğinizden emin değilim. Bu 280-282 arasında var ve daha önce eklemeye çalıştı; ancak bu işe yaramadı. 280 'attribute.attribute_id =?', 281 $ superAttribute-> getAttributeId () 282);
babywit

kodu düzenleyemiyorsanız, lütfen bunu değiştirin
Jagdish Ram

Bu yamayı uygulayan bir uzantı yazan var mı?
TheNorthern_Light

Ayrıca, bu 2.1.9 'da işe yaramıyor.
TheNorthern_Light

2.1.14'te işlevsellik taşındı Magento\ConfigurableProduct\Model\AttributeOptionProvider. İlk bakışta çözülmüş görünüyor, ancak olası hatalar hakkında emin değilim.
simonthesorcerer

3
  1. Git Ayarlanabilir ürün sayfasında -> Düzen Yapılandırma - Bir sonraki ve değişim şey yok -> sonraki -Gelecek tıklayın
  2. Sonra ürünü kaydedin ve sırayla olmalıdır.

Ürün Yenile veya Kaydedilsin mi?
Lasantha

300+ ürünle nasıl yapılır?
Mohammed Joraid

Aslında sadece yapılandırılabilir ürün düzenleme sayfasını açmak ve daha sonra kaydetmek doğrudan sıralama düzenini düzeltir. So 1- Ürünü açın 2- Kaydet'e tıklayın. Ancak, tüm ürünlere manuel olarak gitmeden ve bunları kaydetmeden bu çalışmanın nasıl yapılacağı. Bir kaydetme olayını tetikleyeceğini umarak tüm ürünü toplu olarak eklemeye çalıştım, ancak sıralama düzeltilmedi. MAG2.2.2 kullanarak
Mohammed Joraid

1

Yenidoğan'ın özellik değeri olduğunu düşünüyorsanız, Mağazalar -> Özellikler'e (Ürün) gitmeniz , gerekli özelliği bulmanız ve ayrıca farenizin seçenek değiştirme konumuyla sürükle ve bırak özelliğini kullanmanız gerekir. resim açıklamasını buraya girin

İlişkili ürünler üretilirken açılır listelerin kendileri (boyut, renk, şekil) ayarlanabilir. Düzenleme formunu aç -> Gelişmiş ayarlar -> Yapılandırmaları düzenle - Özellik değerleri adımı ve sürükle ve bırak hareket öznitelikleri yardımıyla resim açıklamasını buraya girin


Evet kesinlikle. "Nitelik boyutu içinde ben Yenidoğan 0-3 mo emretti" Yani öznitelik içinde Yenidoğan 0-3 ay üstü ve ürün açılır bölümünde 0-3 ay üstü Yenidoğan ile gösterilir.
babywit


Herkes bu özniteliğin sırayla listelenen sırayla görünmüyor veya özniteliklerin doğru sırayla gösterilmesini sağlamak için bir geçici çözüm ile neyin neden olduğuna dair bir fikriniz var mı? Mağazamı açmak istiyorum ama bu beni acımasızca sürüklüyor.
babywit


1

Bu sorun hala en son 2.1.7 sürümünde de mevcut olduğundan, bu geçici çözümü kullanabilirsiniz:

Yapılandırılabilir ürün sayfasına gidin >> Yapılandırmalar>> tüm basit ürünleri kaldırın

Bundan sonra bunları istenen sırada tekrar ekleyin:

Ürünleri manuel olarak ekleyin-> Ürünleri ada göre filtreleyin-> Basit ürünleri istediğiniz sırayla ekleyin .


1

V2.3.x sürümünde, yapılandırılabilir ürün açılır seçicisindeki özellik etiketine göre özelliklerin sırasını genişleterek sıralayabilirsiniz

Magento\ConfigurableProduct\Model\AttributeOptionProvider

ve kullanarak

usort($data, function($a, $b) {
    return $a['option_title'] <=> $b['option_title'];
});

GetAttributeOptions () öğesinde döndürülen seçenek veri dizisini $ data sıralamak için


daha fazla ayrıntılandırabilir misin?
Kowsigan Atsayam
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.