ลำดับการเรียงคุณสมบัติของผลิตภัณฑ์ที่กำหนดค่าได้ในดรอปดาวน์ 2.12


9

คำสั่งของดรอปดาวน์ไม่สอดคล้องกับลำดับของแอททริบิวเอง ภายในขนาดคุณลักษณะฉันมีคำสั่งแรกเกิด 0-3 mo

และในรายการแบบหล่นลงจะปรากฏเป็น 0-3 ทารกแรกเกิด

ขนาดทารกแรกเกิดถูกเพิ่มในอีกไม่กี่วันหลังจากขนาดอื่นและผลิตภัณฑ์ที่เรียบง่ายสำหรับทารกแรกเกิดถูกนำเข้าหลังจาก 0-3 เดือน คำแนะนำใด ๆ เกี่ยวกับวิธีรับลำดับของดรอปดาวน์เพื่อทำตามลำดับของรายการภายในแอ็ตทริบิวต์? ฉันล้างแคชและทำดัชนีใหม่แล้ว ฉันอ่านว่า @Khoa TruongDinh มีปัญหาเดียวกัน แต่ไม่เห็นวิธีแก้ปัญหาดังนั้นฉันจึงทำการโพสต์ใหม่


มีผลิตภัณฑ์แอ็ตทริบิวต์ที่มีขนาด 0-3 อยู่แล้วและฉันกำลังเพิ่มผลิตภัณฑ์แอททริบิวทั้งหมดที่มีขนาดแรกเกิด
babywit

คำตอบ:


14

ฉันประสบปัญหาการเรียงลำดับตัวเลือกคุณลักษณะเดียวกันที่ front-end ขณะที่ฉันตรวจสอบปัญหานี้และพบว่าในขณะที่ดึงตัวเลือกคุณลักษณะไม่มีตัวกรองการเรียงลำดับถูกเพิ่มเข้าไปในแบบสอบถามโดยค่าเริ่มต้นใน Magento 2.1.2 ดังนั้นเพื่อแก้ไขปัญหานี้ เพื่อเพิ่มรหัสด้านล่างเพื่อเพิ่มการสั่งซื้อโดยในฟังก์ชั่น getAttributeOptions ในบรรทัดที่ 282 ในไฟล์: ผู้ขาย / magento / โมดูลที่กำหนดค่าผลิตภัณฑ์ / รุ่น / ResourceModel / สินค้า / ประเภท / Configurable.php ตอนนี้มันทำงานได้ดีสำหรับฉัน

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

หากไม่สามารถแก้ไขรหัสได้โปรดแทนที่ฟังก์ชัน getAttributeOptions ด้วยรหัสด้านล่าง:

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);
}

ขอบคุณมากสำหรับสิ่งนี้ แต่ฉันไม่เชี่ยวชาญใน php ฉันไม่แน่ใจว่าจะเพิ่มในการแก้ไขของคุณที่ไหน นี่คือสิ่งที่ฉันมีจาก 280-282 และพยายามที่จะเพิ่มไว้ก่อนหน้า; ใน 282 แต่สิ่งนี้ไม่ได้ผล 280 'attribute.attribute_id =?', 281 $ superAttribute-> getAttributeId () 282);
babywit

หากคุณไม่สามารถแก้ไขรหัสได้โปรดแทนที่สิ่งนี้
Jagdish Ram

มีใครเขียนส่วนขยายที่ใช้โปรแกรมแก้ไขนี้หรือไม่
TheN Northern_Light

นอกจากนี้ดูเหมือนว่าจะไม่ทำงานใน 2.1.9
TheN Northern_Light

ใน 2.1.14 Magento\ConfigurableProduct\Model\AttributeOptionProviderการทำงานได้ย้ายไป ดูการแก้ไขอย่างรวดเร็วก่อนไม่แน่ใจเกี่ยวกับข้อบกพร่องที่เป็นไปได้ว่า
simonthesorcerer

3
  1. ไปที่หน้าผลิตภัณฑ์ที่กำหนดค่าได้ -> แก้ไขการกำหนดค่า -> คลิกถัดไป - ถัดไป - ถัดไปและไม่เปลี่ยนแปลงอะไรเลย
  2. จากนั้นบันทึกผลิตภัณฑ์และควรเป็นไปตามลำดับ

รีเฟรชหรือบันทึกผลิตภัณฑ์
Lasantha

ทำอย่างไรกับ 300+ ผลิตภัณฑ์
Mohammed Joraid

ที่จริงแล้วเปิดหน้าแก้ไขผลิตภัณฑ์ที่กำหนดค่าได้จากนั้นเพียงบันทึกการแก้ไขลำดับการจัดเรียงโดยตรง ดังนั้น 1- เปิดผลิตภัณฑ์ 2- คลิกบันทึก แต่วิธีการทำให้งานนี้โดยไม่ต้องไปที่ผลิตภัณฑ์ทั้งหมดด้วยตนเองและบันทึกไว้ ฉันพยายามเพิ่มผลิตภัณฑ์ทั้งหมดลงในไซต์เป็นกลุ่มโดยหวังว่ามันจะทำให้เกิดเหตุการณ์บันทึก แต่การเรียงลำดับไม่ได้รับการแก้ไข ใช้ MAG2.2.2
Mohammed Joraid

1

หากคุณหมายถึงว่าทารกแรกเกิดเป็นค่าคุณลักษณะคุณจะต้องไปที่ร้านค้า -> คุณสมบัติ (ผลิตภัณฑ์)ค้นหาแอตทริบิวต์ที่ต้องการและใช้การลากและวางพร้อมกับตำแหน่งตัวเลือกการเปลี่ยนเมาส์ของคุณ ป้อนคำอธิบายรูปภาพที่นี่

ตำแหน่งของดรอปดาวน์ตัวเอง (ขนาด, สี, รูปร่าง) สามารถตั้งค่าได้เมื่อสร้างผลิตภัณฑ์ที่เกี่ยวข้อง เปิดแบบฟอร์มแก้ไข -> การตั้งค่าขั้นสูง -> แก้ไขการกำหนดค่า - ขั้นตอนค่าแอตทริบิวต์และด้วยความช่วยเหลือของคุณลักษณะการลากและวางการย้าย ป้อนคำอธิบายรูปภาพที่นี่


ใช่แน่นอน "ภายในขนาดแอ็ตทริบิวต์ที่ฉันสั่งให้ทารกแรกเกิด 0-3 เดือน" ดังนั้นภายในแอททริบิวต์เองทารกแรกเกิดคือ ABOVE 0-3 mo และในรายการแบบเลื่อนลงผลิตภัณฑ์จะแสดงด้วย 0-3 mo ข้างบนทารกแรกเกิด
babywit

ดังนั้นเท่าที่ฉันสามารถบอกได้การสั่งซื้อภายในแอตทริบิวต์นั้นทำงานไม่ถูกต้องใน magento 2.1.2
babywit

ทุกคนมีความคิดใด ๆ ที่ทำให้เกิดปัญหานี้ด้วยลำดับของคุณลักษณะที่ไม่ปรากฏขึ้นในลำดับที่ระบุไว้ในแอตทริบิวต์หรือวิธีแก้ปัญหาเพื่อให้ได้แอตทริบิวต์นั้นปรากฏในลำดับที่ถูกต้อง ฉันต้องการเปิดร้าน แต่สิ่งนี้ทำให้ฉันบ้า
babywit

1

ปัจจุบันนี้เป็นปัญหาที่ทราบแล้วใน Magento 2 ซึ่งยังคงเป็นปัญหา ณ รุ่น 2.1.4

นี่คือปัญหา GitHub: https://github.com/magento/magento2/issues/7441


คำถามถูกถามเมื่อ 3 เดือนที่แล้ว Magento 2.1.4 เปิดตัวเมื่อวาน ...
7ochem

1

เนื่องจากปัญหานี้ยังคงปรากฏอยู่ในรุ่นล่าสุด 2.1.7 คุณสามารถใช้วิธีแก้ปัญหานี้:

ไปที่หน้าผลิตภัณฑ์ที่สามารถกำหนดค่าได้ -> การกำหนดค่า -> ลบผลิตภัณฑ์แบบง่ายทั้งหมด

หลังจากนั้นให้เพิ่มอีกครั้งตามลำดับที่ต้องการ:

เพิ่มผลิตภัณฑ์ด้วยตนเอง -> กรองผลิตภัณฑ์ตามชื่อ -> เพิ่มผลิตภัณฑ์อย่างง่ายตามลำดับที่ต้องการ


1

ใน v2.3.x คุณสามารถเรียงลำดับของแอททริบิวต์ตามเลเบลตัวเลือกในตัวเลือกแบบดรอปดาวน์ผลิตภัณฑ์ที่กำหนดค่าได้โดยการขยาย

Magento\ConfigurableProduct\Model\AttributeOptionProvider

และการใช้

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

วิธีเรียงลำดับข้อมูล data array ตัวเลือกที่ส่งคืนใน getAttributeOptions ()


คุณสามารถอธิบายเพิ่มเติมหรือไม่
Kowsigan Atsayam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.