سؤال

لست متأكدا ما مستندات يقولون.

أعلم أنهم يستخدمون لإضافة سمات (معقدة أم لا) عبر etc/extension_attributes.xml وتمكنت من جعل عملية التجميع تنشئ واجهة باستخدام أساليب مخصصة يتم إنشاؤها تلقائيًا، ولكن هذا كل ما في الأمر.

لنأخذ على سبيل المثال بعض الواجهات: رابط جيثب 1 و رابط جيثب 2.كيف يمكنني استخدام سمات الامتداد لإضافة سمات معينة في إحدى تلك الواجهات؟لست مهتمًا بالصلات المعقدة.مجرد إضافة سمة عددية، قل "attr1" من النوع string.

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

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

المحلول

سمة الامتداد هي وسيلة لتوسيع الواجهة.لنأخذ كمثال الرابط الأول الذي قدمته إلى ProductAttributeMediaGalleryEntryInterface.إذا نظرت إلى الطرق هناك سترى أن لديها هذه الطريقة

/**
 * Retrieve existing extension attributes object or create a new one.
 *
 * @return \Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryExtensionInterface|null
 */
public function getExtensionAttributes();

لاحظ نوع @return للطريقة ProductAttributeMediaGalleryEntryExtensionInterface - هذه واجهة سيتم إعادة إنشائها إذا قمت بتحديد سمة الامتداد لـ ProductAttributeMediaGalleryEntryInterface (افتراضيًا يتم إنشاؤها فارغة بدون أي طرق).سيتم استخدام اسم السمة التي قمت بتسجيلها لإنشاء طرق الواجهة.

لنفترض أنك أضفت attr1 من النوع string.ما يمكنك فعله بعد إعادة إنشاء الواجهة هو الوصول إليها من مثيل الواجهة.

$entity = $objectManager->get('..\ProductAttributeMediaGalleryEntryInterface')
$entity->getExtensionAttributes()->getAttr1();

لتعيين السمة، ستحتاج إلى إنشاء واجهة Extension Attributes

$extension = $objectManager->get('..\ProductAttributeMediaGalleryEntryExtensionInterface')
$extension->setAttr1('value');
$entity->setExtensionAttributes($extension)

الأخير هو السيناريو الافتراضي المتاح، وقد يتم تبسيطه اعتمادًا على كيفية تنفيذ ExtensionInterface والواجهة الرئيسية.

[محدث]

تخدم السمات المخصصة وسمات الامتداد أغراضًا مختلفة.

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

ومع ذلك، كمطور ملحق، فأنت تعرف بالتأكيد بعض السمات - تلك التي قمت بإنشائها في وقت التطوير.يمكن أن يكون حقلاً جديدًا في قاعدة البيانات أو حقلاً في قاعدة البيانات ذات الصلة أو سمة EAV.يمكنك تسجيلها كسمة ملحقة لأنها لا تتغير أبدًا ما لم يتم تغيير قاعدة التعليمات البرمجية.يمكنك الحصول على الإكمال التلقائي للكود لهم.

نصائح أخرى

لإكمال إجابة @EugeneTulika، نحتاج إلى إنشاء /etc/extension_attributes.xml :

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Catalog\Api\Data\ProductInterface">
        <attribute code="attr1" type="string" />
    </extension_attributes>
</config>

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

/** @var ProductExtension $extensionAttributes */
$extensionAttributes = $product->getExtensionAttributes();
$extensionAttributes->setAttr1('super data');
$product->setExtensionAttributes($extensionAttributes);

آمل أن يكون هذا يمكن أن يساعد شخص ما أيضا :)

سوف

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