Magento 2 - Come ottenere l'attributo del prodotto?


Risposte:


15

Un altro modo, per gli attributi personalizzati: possiamo semplicemente ottenere il valore usando getCustomAttribute ()

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

19

La migliore pratica in magento è di farlo tramite XML.

Per ottenere un attributo standard, catalog_product_view.xmlad esempio, fai qualcosa del genere :

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

Questo otterrà il valore di un attributo di input o textarea. Se hai un menu a discesa, dovresti usare il tipo di testo, quindi aggiungi questa riga nell'elenco degli argomenti:

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

Non è necessario creare file o scrivere codici php per ottenere un attributo. In questo modo utilizzerai lo stesso codice php predefinito per qualsiasi attributo e dovrai cambiarlo una sola volta se necessario.


3
Come la tua soluzione, ha cambiato <referenceBlock in <referenceContainer e ha funzionato come "product.info.main" è un contenitore :)
Devtype

11

Ho avuto una soluzione per il mio problema:

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

Spero che sia d'aiuto


1
Per favore, prova ad usare una classe di blocco come "Magento \ Catalog \ Block \ Product \ View \ Description", ma consiglierei di non usare Object Manager in Magento 2 se non come ultima risorsa.
Dynomite,

5

Un altro modo nei file phtml:

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

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


questo è un modo migliore per farlo che usare il gestore degli oggetti che è quasi sempre scoraggiato. +1
Dynomite,

la migliore soluzione che ho trovato. +1: D
jehzlau,

1

Creazione di un blocco all'interno di catalog_product_view.xml e aggiunta all'interno di qualsiasi contenitore desiderato o creazione di un contenitore attorno ad esso.

<!-- 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.