Magento 2 - Comment obtenir l'attribut du produit?

Réponses:

15

Une autre façon, pour les attributs personnalisés: nous pouvons simplement obtenir la valeur en utilisant getCustomAttribute ()

if (null !== $product->getCustomAttribute('your_custom_attribute')) {
   echo $product->getCustomAttribute('your_custom_attribute')->getValue();
}
Khoa TruongDinh
la source
19

La meilleure pratique dans magento est de le faire via xml.

Pour obtenir un attribut standard, vous faites quelque chose comme ceci dans catalog_product_view.xmlpar exemple:

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

Cela obtiendra la valeur d'un attribut d'entrée ou d'une zone de texte. Si vous avez une liste déroulante, vous devez utiliser le type de texte, alors ajoutez cette ligne dans la liste des arguments:

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

Pas besoin de créer de fichiers ou d'écrire un code php pour obtenir un attribut. De cette façon, vous utiliserez le même code php par défaut pour n'importe quel attribut et vous ne devrez le modifier qu'une seule fois si nécessaire.

Claudiu Creanga
la source
3
Comme votre solution, changé <referenceBlock en <referenceContainer et cela a fonctionné comme "product.info.main" est un conteneur :)
Devtype
12

J'avais une solution à mon problème:

$product = $this->productRepository->getById($product);
$attr = $product->getData('status');
MrTo-Kane
la source
7
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$_product = $objectManager->get('Magento\Catalog\Model\Product')->load($product_id);
$_product->getData('attr_code');

J'espère que cela aide

Saurabh Taletiya
la source
1
Veuillez essayer d'utiliser une classe de bloc telle que "Magento \ Catalog \ Block \ Product \ View \ Description" mais je recommanderais de ne pas utiliser le Gestionnaire d'objets dans Magento 2 sauf en dernier recours.
Dynomite
5

Une autre façon dans les fichiers phtml:

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

un péché: vendor/magento/module-catalog/view/frontend/templates/product/view/description.phtml

waltr
la source
c'est une meilleure façon de le faire que d'utiliser le gestionnaire d'objets qui est presque toujours déconseillé. +1
Dynomite
meilleure solution que j'ai trouvée. +1: D
jehzlau
1

Créer un bloc à l'intérieur du catalog_product_view.xml et ajouter à l'intérieur de n'importe quel conteneur que vous voulez ou créer un conteneur autour de lui.

<!-- 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>
Nathaniel Meyer
la source