Magento 2 - Làm thế nào để có được thuộc tính của sản phẩm?


Câu trả lời:


15

Một cách khác, cho các thuộc tính tùy chỉnh: chúng ta có thể chỉ cần nhận giá trị bằng cách sử dụng getCustomAttribution ()

if (null !== $product->getCustomAttribute('your_custom_attribute')) {
   echo $product->getCustomAttribute('your_custom_attribute')->getValue();
}

19

Thực hành tốt nhất trong magento là làm điều đó qua xml.

Để có được một thuộc tính tiêu chuẩn, bạn làm một cái gì đó như thế này catalog_product_view.xmlchẳng hạn:

<referenceContainer name="product.info.main">
    <block class="Magento\Catalog\Block\Product\View\Description" name="product.info.brand" template="product/view/attribute.phtml" before="-">
        <arguments>
            <argument name="at_call" xsi:type="string">getBrand</argument>
            <argument name="at_code" xsi:type="string">brand</argument>
            <argument name="css_class" xsi:type="string">brand</argument>
            <argument name="at_label" xsi:type="string">none</argument>
            <argument name="add_attribute" xsi:type="string">itemprop="brand"</argument>
        </arguments>
    </block>
</referenceContainer>

Điều này sẽ nhận được giá trị của một thuộc tính đầu vào hoặc textarea. Nếu bạn có danh sách thả xuống, bạn nên sử dụng loại văn bản, vì vậy hãy thêm dòng này vào danh sách các đối số:

<argument name="at_type" xsi:type="string">text</argument>

Không cần phải tạo tệp hoặc viết bất kỳ mã php nào để có được một thuộc tính. Bằng cách này, bạn sẽ sử dụng cùng một mã php mặc định cho bất kỳ thuộc tính nào và bạn sẽ chỉ phải thay đổi nó một lần nếu cần.


3
Giống như giải pháp của bạn, đã thay đổi <
ReferenceBlock thành <ReferenceContainer

11

Tôi đã có giải pháp cho vấn đề của mình:

$product = $this->productRepository->getById($product);
$attr = $product->getData('status');

7
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$_product = $objectManager->get('Magento\Catalog\Model\Product')->load($product_id);
$_product->getData('attr_code');

Hy vọng nó giúp


1
Vui lòng thử sử dụng một lớp khối như "Magento \ Catalog \ Block \ Product \ View \ Mô tả" nhưng tôi khuyên bạn không nên sử dụng Trình quản lý đối tượng trong Magento 2 trừ khi là phương sách cuối cùng.
Dynomite

4

Một cách khác trong tập tin phtml:

echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($block->getProduct(), $block->getProduct()->getDescription(), 'description')

như trong: vendor/magento/module-catalog/view/frontend/templates/product/view/description.phtml


đây là một cách tốt hơn để làm điều đó hơn là sử dụng trình quản lý đối tượng mà hầu như không được khuyến khích. +1
Dynomite

giải pháp tốt nhất mà tôi tìm thấy. +1: D
jehzlau

1

Tạo một Khối bên trong catalog_product_view.xml và thêm vào bên trong bất kỳ vùng chứa nào bạn muốn hoặc tạo một vùng chứa xung quanh nó.

<!-- Get a attribute -->
<block class="Magento\Catalog\Block\Product\View\Description" name="product.attributes.Height" template="product/view/attribute.phtml" before="-">
    <arguments>
        <argument name="at_call" xsi:type="string">getHeight</argument>
        <argument name="at_code" xsi:type="string">height</argument>
        <argument name="css_class" xsi:type="string">height</argument>
        <argument name="at_label" xsi:type="string">none</argument>
        <argument name="add_attribute" xsi:type="string">itemprop="Height"</argument>
    </arguments>
</block>
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.