รับค่าของคุณสมบัติหลายตัวเลือกที่เลือก


14

ใช้เวลาต่อไปนี้ "รถยนต์" ผลิตภัณฑ์: โฟล์คสวาเกนกอล์ฟ

มันมีคุณสมบัติหลายcar_optionsตัวเลือกที่มีตัวเลือกที่เป็นไปได้ต่อไปและรหัสของพวกเขา:

  • Airco (id = 123) ที่เลือก
  • เลือกตัวเลือก (id = 124) แล้ว
  • บลูทู ธ (id = 125)
  • การนำทาง (id = 126)

มีการเลือก Radio และ Airco สำหรับผลิตภัณฑ์นี้ ฉันจะรับค่าทั้งสองนี้ (วิทยุ, airco) และแสดงได้อย่างไร ได้รับ $ _product

คำตอบ:


19

ลองสิ่งนี้:

echo $_product->getResource()->getAttribute('car_options')->getFrontend()->getValue($_product);

ฉันไม่ออกเลย! นี่ไม่ใช่รายการแบบเลื่อนลง แต่เป็นแอตทริบิวต์แบบเลือกหลายรายการ!
SPRBRN

มันควรจะทำงานกับตัวเลือกหลายตัวฉันแค่ลองเอง ลองvar_dump($_product->getData('car_options');และตรวจสอบผลลัพธ์ มันควรเป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาคหากไม่ใช่ฉันสามารถจินตนาการได้ว่าโมดูลของบุคคลที่สามกำลังรบกวน
Mayers

ยังไม่มีการส่งออก เราใช้หลายโมดูล แต่ฉันไม่รู้ว่ามันยุ่งกับแอตทริบิวต์
SPRBRN

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

ฉันพบวิธีแก้ปัญหาแล้ว - ดูคำตอบของฉัน
SPRBRN

2
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); $ product = $ objectManager-> get ('Magento \ Catalog \ Model \ Product') -> load ($ product_id);

$ formedevalues ​​= $ product-> getResource () -> getAttributeRawValue ($ product_id, 'my_custom_attribute_code', $ storeid);

มันใช้งานได้ .. หวังว่ามันจะช่วยคุณ ..


เยี่ยมมาก ... มันใช้งานได้เหมือนมีเสน่ห์ !!!!!
Sneha Panchal

ดีใจที่รู้ :) @SnehaPanchal
Sameer Bhayani

0

รหัสต่อไปนี้

  1. ส่งคืนรหัสค่าของตัวเลือกที่เลือกสำหรับผลิตภัณฑ์นี้: 123,124
  2. เปลี่ยนเป็นอาร์เรย์: array (123,124)
  3. จากนั้นค้นหาฉลากของตัวเลือกเหล่านั้น: 123 => Aircoและ124 => Radio
  4. และส่งคืนค่าในสตริงข้อความ: Airco, Radio
$ _attribute_code = 'car_options';
$ car_options_csv = Mage :: getResourceModel ('แคตตาล็อก / ผลิตภัณฑ์') -> getAttributeRawValue ($ productId, $ _attribute_code, $ storeId); // คืนค่า: 123,124
$ car_options = explode (',', $ car_options_csv);
$ attributeId = Mage :: getResourceModel ('eav / entity_attribute') -> getIdByCode ('catalog_product', $ _ attribute_code);
$ attribute = Mage :: getModel ('catalog / resource_eav_attribute') -> load ($ attributeId);
$ attributeOptions = $ attribute -> getSource () -> getAllOptions ();

$ res = '';
foreach ($ attributeOptions เป็น $ a)
{
    $ l = $ a ['label'];
    $ m = $ a ['value'];
    if (strlen (trim ($ l))> 0 && in_array ($ m, $ car_options))
    {
        $ res. = ตัด ($ l) ',';
    }
}
echo substr ($ res, 0, -2) ;;

อุ๊ย - คุณไม่ต้องการลงไปตามทางนั้น โดยเฉพาะอย่างยิ่งตั้งแต่คำตอบของเมเยอร์ข้างต้นทำงานได้ดี ฉันก็ไม่แน่ใจเหมือนกันว่าถ้าคุณไม่ผ่านระบบแปลของ Magento ด้วยวิธีนี้ - ยังไม่ได้ตรวจสอบ
เวิร์กโฟลว์

0

ขอบคุณ @Mayers โซลูชันของเขาดีเกินไปที่จะไม่แทนที่ getAttributeText ดั้งเดิม:

 public function getAttributeText($attributeCode)  
 {
    return $this->getResource()
        ->getAttribute($attributeCode)
        ->getFrontend()
        ->getValue($this);
 }

และเพื่อเพิ่มรูปแบบของลูกค้าเช่นกัน

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