تحديد السمات ذات التسميات الرقمية
-
29-09-2020 - |
سؤال
أعتقد أن هذا خطأ أساسي في 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