سؤال

أعتقد أن هذا خطأ أساسي في Magento ، لكنني أعتقد أنني قد أتيت إلى هنا لأطلب بعض الاقتراحات على أي حال.

لدي سمة ، دعنا نسميها colour_code. إنها سمة محددة (الخلفية int) وهي قابلة للتكوين.إنها متطابقة في تكوين eav_attribute و catalog_eav_attribute مع السمة الافتراضية size بالمناسبة.

لقد كنت أصلح المنتجات بهذه السمة في بعض اختبارات الوحدة ، ولاحظت أنه إذا كانت قيمة السمة (التسمية) رقمية ، فيمكن الخلط بين Magento والقيمة والتسمية ، على سبيل المثال:

# Mage_Eav_Model_Entity_Attribute_Source_Abstract::getAllOptions()
Array
(
    Array
    (
        [value] => 902
        [label] => 143
    )
    Array
    (
        [value] => 386
        [label] => 902
    )
    Array
    (
        [value] => 316
        [label] => A01
    )
)

باستخدام ما ورد أعلاه كمثال صغير جدًا لنتيجة getAllOptions لمصدر السمة ($attribute->getSource()->getAllOptions()) ، أتحقق من \ n قيم المنتجات الثابتة مثل:

// Product fixture has colour_code: A01
$product->getColourCode(); // 316 <--- the option_id

// Product fixture has colour_code: 902
$product->getColourCode(); // 902 <--- the VALUE

تكمن المشكلة عند استخدام رمز اللون 902 في إرجاع 902 ، بدلاً من معرف الخيار.لا أحب بشكل خاص حقيقة أن Magento تُرجع معرف الخيار ، لكنني أفهم السبب.هذا جيد ، طالما أنه متسق - في هذه الحالة ليس كذلك على الإطلاق.

باستخدام 902 كـ $value ، قمت بالتنقيب في هذا الأمر وصولاً إلى المنطق الموجود في Mage_Eav_Model_Entity_Attribute_Source_Abstract::getOptionId سطر 98 ، حيث يُرجع strcasecmp($option['label'], $value)==0 خطأً ، ثم يعيد $option['value'] == $value القيمة الصحيحة في الإدخال الأول في ذلك المصفوفة النموذجية (القيمة = 902 ، التسمية = 143).في هذه الحالة ، تُرجع الطريقة $option['value'] ، وهي 902. لا تتاح لها فرصة النظر إلى الخيار الصالح (option_id 386).

public function getOptionId($value)
{
    foreach ($this->getAllOptions() as $option) {
        if (strcasecmp($option['label'], $value)==0 || $option['value'] == $value) {
                                                        ^--- this causes the problem!
            return $option['value'];
        }
    }
    return null;
}

مالذي استطيع فعله حيال هذا؟

هل كانت مفيدة؟

المحلول

بالنسبة إلى سمات التحديد المتعدد ، يعد هذا سلوكًا متوقعًا.

إذا كنت تريد قيمة الواجهة الأمامية / النصية للسمة ، يمكنك استخدام Mage_Catalog_Model_Product::getAttributeText مع رمز السمة:

$product->getAttributeText('colour_code'); // A01
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top