Magento 2: อะไรคือความแตกต่างระหว่างแอตทริบิวต์ส่วนขยายและคุณสมบัติที่กำหนดเอง?


14

ฉันมีคำถามในใจว่าอะไรคือความแตกต่างที่แน่นอนระหว่างแอตทริบิวต์ส่วนขยายและแอตทริบิวต์ที่กำหนดเอง ?

ใครที่นี่ที่สามารถให้ความคิดกับฉันได้บ้าง!


@ ยอมรับคุณช่วยฉันด้วยนี้ได้ไหม!
ไม่ระบุชื่อ

ฉันไม่แน่ใจ 100% ว่าทำไมฉันถึงไม่ตอบคำถาม แต่มุมมองของฉันทั้งสองเหมือนกัน
Amit Bera

คำตอบ:


8

แอตทริบิวต์ที่กำหนดเองคือคุณสมบัติที่เพิ่มเข้ามาเพื่ออธิบายถึงเอนทิตีเช่นคุณลักษณะของผลิตภัณฑ์, คุณลักษณะของลูกค้าเป็นต้นเหล่านี้เป็นส่วนย่อยของแอตทริบิวต์ EAV

แอตทริบิวต์ส่วนขยายในทางกลับกันโดยทั่วไปจะใช้สำหรับชนิดข้อมูลที่ซับซ้อนมากขึ้นเช่นการเพิ่มข้อมูลที่ซับซ้อนเพิ่มเติมลงในเอนทิตีจากตารางภายนอกที่กำหนดเอง

กล่าวง่ายๆคือแอตทริบิวต์ที่กำหนดเองนั้นเป็นไปตามมาตรฐาน EAV ในขณะที่แอตทริบิวต์ส่วนขยายใช้สำหรับข้อมูลที่ซับซ้อนมากขึ้นซึ่งแอตทริบิวต์ที่กำหนดเองไม่สามารถจัดการได้


5

แอตทริบิวต์ที่กำหนดเองคือสิ่งที่เพิ่มเข้ามาในนามของผู้ขาย ตัวอย่างเช่นผู้ค้าอาจต้องเพิ่มแอตทริบิวต์ที่กำหนดเองให้กับเอนทิตีผลิตภัณฑ์ชื่อ 'ปรับแต่งได้' ซึ่งเขาต้องการบันทึกข้อมูลว่าผลิตภัณฑ์นี้จะได้รับการปรับแต่งจากบุคคลที่สามหรือไม่

ทั้งแอตทริบิวต์ที่กำหนดเองและส่วนขยายมีฟังก์ชันการทำงานเล็กน้อยเหมือนกัน (เพื่อเก็บข้อมูล) แต่มีความแตกต่างอย่างมากระหว่างฟังก์ชันที่กำหนดเองและคุณลักษณะส่วนขยาย เช่น

เราสามารถเพิ่มเกณฑ์การค้นหาพิเศษด้วยแอตทริบิวต์ส่วนขยายโดยการเข้าร่วมกับตารางฐานข้อมูลอื่น เราสามารถตรวจสอบได้โดยการเพิ่ม ACL เข้าไป ให้อธิบายรายละเอียดเล็กน้อย

โปรดดูตัวอย่างต่อไปนี้ คุณต้องสร้าง /etc/extension_attributes.xml

 <config>
    <extension_attributes for="Path\To\Interface">
        <attribute code="name_of_attribute" type="datatype">
           <resources>
              <resource ref="permission"/>
           </resources>
           <join reference_table="" reference_field="" join_on_field="">
              <field>field1</field>
           <field>field2</field>
           </join>
        </attribute>
    </extension_attributes>
</config>

การค้นหาแอตทริบิวต์ส่วนขยาย: ในแท็กเข้าร่วมคุณสามารถกำหนดตารางที่เกี่ยวข้องที่คุณต้องการเข้าร่วมและรับข้อมูลจากตารางนี้ ใน reference_tableแอตทริบิวต์คุณจะต้องให้ชื่อตารางในขณะที่reference_fieldจะเป็นคีย์หลัก (คีย์ตารางแรกที่แอตทริบิวต์ส่วนขยายนี้สร้างเช่นในตัวอย่างนี้สินค้า) ที่คุณใส่ความสัมพันธ์ของคุณ / เข้าร่วม join_on_fieldเป็นชื่อที่แนะนำจะเป็นตารางที่สองที่เราต้องการบันทึก ภายใต้แท็กฟิลด์คุณสามารถเพิ่มฟิลด์ที่จำเป็นทั้งหมดของคุณจริง ๆ แล้วคุณต้องการรับข้อมูล

การพิสูจน์ตัวตนของแอตทริบิวต์ส่วนขยาย: คุณสามารถ จำกัด ค่าแอตทริบิวต์ส่วนขยายนี้โดยใช้แท็กเพื่อให้เข้าใจว่า Lets นี้มีตัวอย่าง สมมติว่าเรามีแอตทริบิวต์ส่วนขยายมากกว่าหนึ่งรายการสำหรับผลิตภัณฑ์และหนึ่งในนั้นกล่าวว่า extra_special_price เราไม่ต้องการแสดงให้ผู้ใช้ทุกคนเห็น เราสามารถ จำกัด คุณสมบัตินี้ ดูตัวอย่างต่อไปนี้

<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="stock_item" type="Magento\CatalogInventory\Api\Data\StockItemInterface">
            <resources>
                <resource ref="Magento_CatalogInventory::cataloginventory"/>
            </resources>
        </attribute>
    </extension_attributes>
<attribute code="logo_size" type="string">           
        </attribute>
</config>

ในตัวอย่างนี้แอ็ตทริบิวต์ stock_item ถูก จำกัด เฉพาะผู้ใช้ที่มี Magento_CatalogInventory :: cataloginventory สิทธิ์ในขณะที่ logo_size ไม่มีเงื่อนไขใด ๆ

ดังนั้นตอนนี้ถ้าคุณได้รับวัตถุผลิตภัณฑ์ (ในทางที่เคยผ่าน api หรือจากเว็บ) หากผู้ใช้ปัจจุบันมีสิทธิ์สำหรับแคตตาล็อกสินค้าคงคลังเขาจะได้รับค่า stock_items เท่านั้น

ไม่อยู่ในขอบเขตของคำถามนี้ แต่ให้ดูว่าคุณจะสร้างแอททริบิวได้อย่างไรโดยใช้ custom_extension ในลิงค์ต่อไปนี้ในวิธีที่ง่ายมาก: วิธีสร้าง extension_attributes

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