2015-12-23 12 views
5

Ich versuche, die Liste der Dropdown-Attribute abzurufen und zu überprüfen, ob der Wert vorhanden ist (wenn ich den Wert abrufen und dem Produkt zuweisen muss) und if es wird nicht ich muss es erstellen und seinen Wert erhalten, um es dem Produkt zuzuweisen.So erhalten Sie Produktattributoptionen nach Attributcode in Magento 2.0

$attribute = $this->objectManager->create('Magento\Eav\Model\Entity\Attribute'); 
$attributeId = $attribute->getIdByCode('catalog_product','manufacturer'); 
$model = $this->objectManager->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute'); 
$model->load($attributeId); 
print_r($model->getFrontendLabel()); 
+0

Könnten Sie einige Code schreiben? –

+0

yeah sure., Bitte überprüfen Sie jetzt – Xubaer

+0

Haben Sie einen Weg gefunden? :) –

Antwort

14

Magento 2 Richtlinien Nach Sie sollte nicht Object selbst verwenden. Stattdessen müssen Sie die Abhängigkeitsinjektion verwenden. More info here

In Ihrem Block/Controller/Helper ..., erstellen Sie einen Konstruktor und injizieren \Magento\Catalog\Model\Product\Attribute\Repository Klasse. Zum Beispiel:

/** 
* @var \Magento\Catalog\Model\Product\Attribute\Repository $_productAttributeRepository 
*/ 
protected $_productAttributeRepository; 

/** 
* @param \Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository 
*/ 
public function __construct(\Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository) 
{ 
    $this->_productAttributeRepository = $productAttributeRepository; 
} 

Dann in Ihrer speziellen Methode, mögen Sie (PHPDoc für Klarheit hinzugefügt) nennen:

/** @var \Magento\Eav\Api\Data\AttributeOptionInterface[] $manufacturerOptions */ 
$manufacturerOptions = $this->_productAttributeRepository->get('manufacturer')->getOptions(); 

Sie können jetzt Optionen Werte und Etiketten auf diese Weise erhalten:

foreach ($manufacturerOptions as $manufacturerOption) { 
    $manufacturerOption->getValue(); // Value 
    $manufacturerOption->getLabel(); // Label 
} 
-6

Der folgende Code ist hilfreich, um bestimmte Attributwerte zu finden. Wie hier ist die Farbe auf meinem Attribut, mit dem unteren Code können wir was bekommen und alle Farben werden mit diesem Attribut abgebildet.

$attributeId = Mage::getResourceModel(‘eav/entity_attribute’)>getIdByCode(‘catalog_product’,’color’); 
$collection =Mage::getResourceModel(‘eav/entity_attribute_option_collection’)>setPositionOrder(‘asc’)->setAttributeFilter($attributeId)->setStoreFilter(0)->load(); 
print_r($collection->getData()); 
+3

das ist magento 1.x, ich brauche für magento 2.0 – Xubaer

0
<?php echo $_product->getResource()->getAttribute('movement')->getFrontend()->getValue($_product);?> 

$ _product ist das Objekt des Produkts Der obige Code gibt den Attributwert des Attributnamens "Bewegung" zurück.

0

Injizieren Sie eine Instanz von \Magento\Catalog\Model\Product\Attribute\Repository in Ihrem Konstruktor (in einem Block, Hilfsklasse oder wo auch immer):

/** 
* @var \Magento\Catalog\Model\Product\Attribute\Repository $_productAttributeRepository 
*/ 
protected $_productAttributeRepository; 

/** 
* ... 
* @param \Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository 
* ... 
*/ 
public function __construct(
    ... 
    \Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository, 
    ... 
) { 
    ... 
    $this->_productAttributeRepository = $productAttributeRepository; 
    ... 
} 

Dann eine Methode in Ihrer Klasse erstellen Sie das Attribut von Code zu erhalten:

/** 
* Get single product attribute data 
* 
* @return Magento\Catalog\Api\Data\ProductAttributeInterface 
*/ 
public function getProductAttributeByCode($code) 
{ 
    $attribute = $this->_productAttributeRepository->get($code); 
    return $attribute; 
} 

Sie können diese Methode dann wie folgt aufrufen, z innerhalb einer .phtml-Datei

$attrTest = $block->getProductAttributeByCode('test'); 

Dann können Sie auf das Attributobjekt, z.

  1. Get Optionen: $attrTest->getOptions()
  2. Get Frontend-Label für jeden Speicher: $attrTest->getFrontendLabels()
  3. Debug das Datenfeld: echo '> ' . print_r($attrTest->debug(), true);

Debug: Array ( [attribute_id] => 274 [entity_type_id] => 4 [attribute_code] => product_manual_download_label [zurück d_type] => varchar [frontend_input] => Text [frontend_label] => Produkthandbuch-Download Label [is_required] => 0 [is_user_defined] => 1 [default_value] => Produkthandbuch herunterladen [is_unique] = > 0 [is_global] => 0 [is_visible] => 1 [is_searchable] => 0 [is_filterable] => 0 [is_comparable] => 0 [is_visible_on_front] => 0 [is_html_allowed_on_front] => 1 [is_used_for_price_rules] => 0 [is_filterable_in_search] => 0 [used_in_product_listing] => 0 [used_for_sort_by] => 0 [is_visible_in_advanced_search] => 0 [Position] => 0 [is_wysiwyg_enabled] => 0 [is_used_for_promo_rules] => 0 [is_required_in_admin_store] => 0 [is_used_in_grid] => 1 [is_visible_in_grid] => 1 [is_filterable_in_grid] => 1 [search_weight] => 1)

+0

Irgendeine Idee Wie alle Attribute mit productAttributeRepository zu laden? Ich möchte eine Sammlung von Attributen, aber mit all diesen Optionen, die Sie gezeigt haben. –

Verwandte Themen