Antworten:
Sie können es genauso wie Magento 1 tun,
Weitere Informationen finden Sie unter Details, Besuchen, Options-ID abrufen und Beschriften des konfigurierbaren Produkts
// Optionsbezeichnung basierend auf Options-ID vom Produktobjekt abrufen
$optionId = 10;
$attr = $_product->getResource()->getAttribute('color');
if ($attr->usesSource()) {
$optionText = $attr->getSource()->getOptionText($optionId);
}
//get option text ex. Red
// Options-ID basierend auf Optionsbezeichnung abrufen
$attr = $_product->getResource()->getAttribute('color');
if ($attr->usesSource()) {
$option_id = $attr->getSource()->getOptionId("Red");
}
//get option id ex. 10
Best Practice in Magento ist es, dies über XML zu tun.
Um ein Standardattribut brand
wie dieses zu erhalten, führen Sie catalog_product_view.xml
zum Beispiel Folgendes aus:
<referenceBlock 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>
</referenceBlock>
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 haben Sie Konsistenz und verwenden für alle Attribute dieselbe Datei attribute.phtml. Wenn sich etwas ändert, müssen Sie es nur an einer Stelle ändern.
Hat für mich gearbeitet
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
Verwenden Sie die Factory-Methode
protected $_attributeLoading;
public function __construct(
.....
\Magento\Catalog\Model\ResourceModel\ProductFactory $attributeLoading,
....
) {
parent::__construct($context);
....
$this->_attributeLoading = $attributeLoading;
....
}
public function getAttributeOptionId($attribute,$label)
{
$poductReource=$this->_attributeLoading->create();
$attr = $poductReource->getAttribute($attribute);
if ($attr->usesSource()) {
return $option_id = $attr->getSource()->getOptionId($label);
}
}
public function getAttributeOptionText($attribute,$label)
{
$poductReource=$this->_attributeLoading->create();
$attr = $poductReource->getAttribute($attribute);
if ($attr->usesSource()) {
return $option_Text = $attr->getSource()->getOptionText($label);
}
}
in der HTML-Datei
$this->getAttributeOptionId('color','//optionLabel');
$this->getAttributeOptionText('color','//optionId');
Ich bekomme eine einfache Lösung. Dadurch wird nur der Attributwert mit dem Attributcode für ein Produkt angezeigt. Ich habe die Katalog- und Detailseite eingecheckt.
der Code ist
<?php echo $_product->getAttributeText('size'); ?>
Hier ist Größe der Attributname.
referenz: anbieter / magento / modulkatalog / ansicht / frontend / vorlagen / produkt / ansicht / attribute.phtml zeile: 35
$product->getResource()
hat einen DocBlock-Hinweis, dass er mindestens in Version 2.2.2 veraltet ist, und deshalb habe ich gezögert, ihn zu verwenden. Kam mit dieser Lösung stattdessen inspiriert von denen, die bereits auf dieser Seite:
$optionId = $product->getDataByKey('attribute_code');
$optionText = null;
$attributes = $product->getAttributes();
if ($optionId && array_key_exists('attribute_code', $attributes)) {
$attr = $attributes['attribute_code'];
if ($attr->usesSource()) {
$optionText = $attr->getSource()->getOptionText($optionId);
}
}
if ($optionText) {
//do something with $optionText
}
Als Referenz ist dies die Methode in AbstractModel.php
/**
* Retrieve model resource
*
* @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
* @deprecated 101.0.0 because resource models should be used directly
*/
public function getResource()
{
return $this->_getResource();
}
getResource()
in diesem Modell nicht einmal die Methode finden : github.com/magento/magento2/blob/2.3-develop/app/code/Magento/…
getResource()
war eine Methode, die vorher existierte. In v2.2.2 war es, wie ich bereits erwähnte, bereits für die Verfallserklärung vorgesehen. Ich vermute, dass der 2.3-Entwicklungszweig abgeschlossen wurde. Also mein Beispiel das diese Funktion nicht benötigt.
Denn hier kommt jeder her.
Wenn Sie keine Produktentität haben, können Sie mit diesen Schritten einen Optionswert abrufen.
Injizieren Sie \Magento\Eav\Api\AttributeRepositoryInterface
in Ihre Klasse
public function __construct(
...
\Magento\Eav\Api\AttributeRepositoryInterface $attributeRepository,
...
) {
...
$this->attributeRepository = $attributeRepository;
...
}
Verwenden Sie das Repo, um die Attributinstanz abzurufen
// 4 is the default entity_type_id for product
$attribute = $this->attributeRepository->get('4', '[attribute_code]');
Verwenden Sie $attribute
, um die Options-ID aus dem Optionswert abzurufen
$optionId = $attribute->getSource()->getOptionId('[option_value]');
Sie können zum Abrufen der Attributbezeichnung verwenden
$product->getResource()->getAttribute($key)->getFrontend()->getLabel($product);
Sie können den Objektmanager verwenden:
$pid = 1;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$pdata = $objectManager->create('Magento\Catalog\Model\Product')->load($pid);
$getlable = $pdata->getResource()->getAttribute($key)->getFrontend()->getLabel($pdata);
Bitte versuchen Sie diesen Code
Schritt 1) Zuerst müssen Sie die Produkte laden
$_productCollection = $block->getLoadedProductCollection();
Schritt 2) Auf der Produktlistenseite gibt es eine foreach-Schleife, um die Produkte wie diese aufzulisten
foreach ($_productCollection as $_product)
Schritt 3) Ihr Code befindet sich in dieser Schleife. Platzieren Sie den folgenden Code an einer beliebigen Stelle, an der Sie die Attributbezeichnung anzeigen möchten.
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
Ersetzen Sie einfach Ihren_attribute_code durch den Namen Ihres Attributs.