لم يتم تحديد السمات في الواجهة الخلفية بعد تغييرها من القائمة المنسدلة إلى التحديد المتعدد

magento.stackexchange https://magento.stackexchange.com/questions/101129

سؤال

لقد تحولنا اسقاط يعزو إلى تحديد المعطي السمة باستخدام الاستعلامات التالية:

الخطوة 1)

UPDATE eav_attribute SET
entity_type_id = '10',
attribute_model = NULL,
backend_model = 'eav/entity_attribute_backend_array',
backend_type = 'varchar',
backend_table = NULL,
frontend_model = NULL,
frontend_input = 'multiselect',
frontend_class = NULL
WHERE attribute_id = '1244';

الخطوة 2)

INSERT INTO catalog_product_entity_varchar ( entity_type_id, attribute_id, store_id, entity_id, value)
SELECT 10, 1244, 1, entity_id, value 
FROM catalog_product_entity_int
WHERE attribute_id = 1244;

الخطوه 3)

DELETE FROM catalog_product_entity_int
WHERE entity_type_id = 10 and attribute_id = 1244;

الآن يتم عرض القيم التي قدمناها من قبل للسمة المنسدلة في الواجهة الأمامية.لكنها لم تحدد تلك القيم في الواجهة الخلفية بعد أن قمنا بتغييرها إلى سمة التحديد المتعدد لقد قمنا بإعادة الفهرسة عدة مرات.

الاعتمادات : http://swarminglabs.com/how-to-change-a-product-dropdown-attribute-to-a-multi-select/

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

المحلول

السمة بعد الانتقال من SELECT إلى MULTISELECT تعمل.يتم حفظه في الخلفية.

كما اقترح "David Verholen"، ليس من الجيد استخدام استعلامات SQL المباشرة.يجب دائمًا استخدام برنامج التثبيت/الترقية.

بالإضافة إلى ذلك، أنصحك بالتحقق مما يلي:

في عرض المتجر الخاص بك، يجب تحديد قيم هذه السمة "التحديد المتعدد" وتحديد مربع الاختيار "استخدام الافتراضي" يمكن/لا يمكن (اختياري).

تحقق من ذلك وأخبرني إذا كنت قادرًا على عرض هذا في الواجهة الأمامية الخاصة بك.

بالإضافة إلى ذلك، لتتمكن من عرض سمة التحديد المتعدد التي قد تحتاج إلى استخدامها $_product->getAttributeText('custom_attribute').سيعرض هذا مجموعة من المعرفات 721, 722, 723 وبعد ذلك قد تحتاج إلى تشغيل ملف com.foreach لعرض القيم الصحيحة كما هو موضح أدناه (اختراق قذر ولكنه يعمل):

لقد فعلت ذلك في ملف /catalog/product/view/attributes.phtml

<?php
$_ageValues = $_product->getAttributeText($_data['code']);
$count = 1;
if(is_array($_ageValues)):
    foreach($_ageValues as $_ageValue):
        if($count > 1) { echo ","; }
        echo $_ageValue;
        $count++;
    endforeach; 
else: echo $_product->getAttributeText($_data['code']);
endif;
?>

الترميز السعيد...

نصائح أخرى

البرنامج التعليمي هو في الواقع خاطئ.

بالنسبة لحقل التحديد، في جدول catalog_product_entity_int، يتم تخزين معرف خيار كل سمة في صف واحد.يتم تخزين القيم الفعلية في جدول آخر.

بالنسبة للحقل متعدد التحديد (الذي تتم إدارته بواسطة نموذج الواجهة الخلفية)، يتم تخزين القيم مفصولة بفواصل في صف واحد في catalog_product_entity_varchar.

لذلك لا يمكنك فقط نسخ القيم من جدول إلى آخر.عليك تحويلها

===تحديث===

لقد كنت مخطئا بشأن هذا.من المفترض أن يعمل البرنامج التعليمي بالفعل، ولكن نظرًا لبعض إعدادات المتجر الخاصة، كان هناك المزيد مما يجب القيام به مذكور هنا:

يتم عرض قيم السمات في الواجهة الأمامية فقط من عرض المتجر

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top