Magento 2 - Wie bekomme ich Produktattribute?


Antworten:


14

Eine andere Möglichkeit für die benutzerdefinierten Attribute: Sie können den Wert einfach mit getCustomAttribute () abrufen.

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

19

Best Practice in Magento ist es, dies über XML zu tun.

Um ein Standardattribut zu erhalten, führen Sie catalog_product_view.xmlbeispielsweise Folgendes aus:

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

Dadurch wird der Wert eines Eingabeattributs oder eines Textbereichs abgerufen. Wenn Sie eine Dropdown-Liste haben, sollten Sie den Texttyp verwenden, also fügen Sie diese Zeile in die Liste der Argumente ein:

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

Keine Notwendigkeit, Dateien zu erstellen oder PHP-Code zu schreiben, um ein Attribut zu erhalten. Auf diese Weise verwenden Sie für jedes Attribut den gleichen Standard-PHP-Code und müssen ihn bei Bedarf nur einmal ändern.


3
Wie bei Ihrer Lösung wurde <referenceBlock in <referenceContainer geändert und es hat funktioniert, als "product.info.main" ein Container ist :)
Devtype

11

Ich hatte eine Lösung für mein Problem:

$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');

Ich hoffe es hilft


1
Bitte versuchen Sie, eine Blockklasse wie "Magento \ Catalog \ Block \ Product \ View \ Description" zu verwenden, aber ich würde empfehlen, Object Manager in Magento 2 nur als letzten Ausweg zu verwenden.
Dynomite

4

Ein anderer Weg in Phtml-Dateien:

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

wie in: vendor/magento/module-catalog/view/frontend/templates/product/view/description.phtml


Dies ist eine bessere Möglichkeit, als den Objekt-Manager zu verwenden, von dem fast immer abgeraten wird. +1
Dynomite

beste Lösung, die ich gefunden habe. +1: D
jehzlau

1

Erstellen Sie einen Block in der Datei catalog_product_view.xml und fügen Sie ihn in einen beliebigen Container ein oder erstellen Sie einen Container darum herum.

<!-- 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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.