Magento 2: Sự khác biệt giữa Thuộc tính mở rộng và Thuộc tính tùy chỉnh là gì?


12

Tôi có câu hỏi trong đầu về sự khác biệt chính xác giữa Thuộc tính mở rộngThuộc tính tùy chỉnh là gì?

Có ai ở đây có thể cung cấp cho tôi một số ý tưởng không?!


@Amit, bạn có thể giúp tôi với điều này?!
nặc danh

Tôi không chắc chắn 100% rằng tại sao tôi không trả lời câu hỏi. Nhưng quan điểm của tôi cả hai đều giống nhau
Amit Bera

Câu trả lời:


8

Thuộc tính tùy chỉnh là các thuộc tính được thêm vào để mô tả một thực thể, chẳng hạn như thuộc tính sản phẩm, thuộc tính khách hàng, v.v ... Đây là một tập hợp con của các thuộc tính EAV.

Mặt khác, các thuộc tính mở rộng thường được sử dụng cho các loại dữ liệu phức tạp hơn, chẳng hạn như thêm dữ liệu phức tạp bổ sung vào một thực thể từ bảng bên ngoài tùy chỉnh.

Nói một cách đơn giản, các thuộc tính tùy chỉnh tuân theo các tiêu chuẩn EAV trong khi các thuộc tính mở rộng được sử dụng cho dữ liệu phức tạp hơn mà các thuộc tính tùy chỉnh không thể xử lý.


5

Thuộc tính tùy chỉnh là những thuộc tính được thêm vào thay mặt cho một thương gia. Ví dụ: một thương gia có thể cần thêm các thuộc tính tùy chỉnh vào thực thể sản phẩm có tên 'có thể tùy chỉnh', trong đó anh ta muốn lưu thông tin rằng sản phẩm này sẽ được tùy chỉnh từ bên thứ 3 hay không.

Cả hai thuộc tính tùy chỉnh và tiện ích mở rộng đều có cùng một chức năng (để giữ dữ liệu) nhưng có sự khác biệt đáng kể giữa chức năng thuộc tính tùy chỉnh & thuộc tính mở rộng. ví dụ

chúng ta có thể thêm các tiêu chí tìm kiếm bổ sung với thuộc tính mở rộng bằng cách nối nó với bất kỳ bảng DB nào khác. Chúng tôi có thể xác thực nó bằng cách thêm ACL trong đó. Hãy giải thích chi tiết.

Xin hãy xem đoạn trích sau đây. Bạn phải tạo /etc/extension_attribut.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>

Tìm kiếm các thuộc tính mở rộng: Trong thẻ tham gia, bạn có thể xác định bảng liên quan mà bạn muốn tham gia và lấy dữ liệu từ bảng này. Trong reference_table thuộc tính bạn phải từ bỏ tên bảng trong khi reference_field sẽ là khóa chính (key bảng đầu tiên mà thuộc tính mở rộng này tạo ra như trong ví dụ này sản phẩm) mà bạn đặt mối quan hệ của bạn / join. jo_on_field như tên gợi ý sẽ là bảng PK thứ hai mà chúng ta muốn ghi lại. Trong thẻ trường, bạn có thể thêm tất cả các trường bắt buộc thực sự bạn muốn nhận dữ liệu

Xác thực thuộc tính mở rộng: Bạn có thể hạn chế giá trị thuộc tính mở rộng cụ thể này bằng cách sử dụng thẻ Để hiểu điều này Cho phép có một ví dụ. Giả sử chúng tôi có nhiều hơn một thuộc tính mở rộng cho các sản phẩm và một trong số chúng nói thêm_special_price chúng tôi không muốn hiển thị cho tất cả người dùng. Chúng ta có thể hạn chế thuộc tính này. Có một cái nhìn vào đoạn trích sau đây.

<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>

Trong ví dụ này, thuộc tính stock_item chỉ giới hạn cho những người dùng có quyền Magento_CatalogInventory :: cataloginventory trong khi logo_size không có bất kỳ điều kiện nào trên đó.

Vì vậy, bây giờ nếu bạn nhận được đối tượng sản phẩm (theo cách nào đó thông qua api hoặc từ web) nếu người dùng hiện tại có quyền cho danh mục sản phẩm, anh ta sẽ chỉ nhận được các giá trị stock_items.

Ngoài phạm vi của câu hỏi này nhưng hãy xem cách bạn sẽ tạo thuộc tính bằng cách sử dụng custom_extension trong liên kết sau theo cách rất đơn giản: Cách tạo extension_attribut

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.