Attributwert / ID aus Attributtext / Beschriftung abrufen

7

Ich muss Attributbezeichnungen in der URL anzeigen, um Produkte zu filtern. Ich kann eine URL mit Attributbezeichnungen generieren. Jetzt muss ich nur noch die Attributbezeichnung in die Attribut-ID / den Wert konvertieren (Beispiel: 1,2), damit der Code hinter den Kulissen so funktioniert, wie er ist (basierend auf dem Attributwert / der ID).

Innerhalb der apply()Funktion von app/code/core/Mage/Catalog/Model/Layer/Filter/Attribute.phpbekomme ich Attributbezeichnung in $filter = $request->getParam($this->_requestVar);(zB: Blau).

Wie kann ich diese Attributbezeichnung in eine Attribut-ID konvertieren (sagen wir für Grün ist es 2), damit ich sie weitergeben kann $this->_getResource()->applyFilterToCollection($this, $filter);und die Backend-Funktionalität so funktioniert, wie sie ist? Ich habe es versucht $filter->getId(), $filter->getValue()aber es funktioniert nicht.

Ist es möglich, den Attributwert / die ID von der Attributbezeichnung abzurufen?

amitshree
quelle

Antworten:

19

Attributwert / ID aus Attributtext / Bezeichnung abrufen:

$attr = 'your_attribute';
$_product = Mage::getModel('catalog/product');
$attr = $_product->getResource()->getAttribute($attr);
if ($attr->usesSource()) {
    echo $color_id = $attr->getSource()->getOptionId("Purple");
}
Manashvi Birla
quelle
Dies wird die ID des Attributs durch seinen Code erhalten, nicht die ID der Attributoption durch seine Bezeichnung :)
Sander Mangel
1
Überprüfen Sie meinen aktualisierten Code
Manashvi Birla
1
Schöne, sehr wenige Codezeilen
Sander Mangel
@ Manashvibirla: Wie kann ich $attr = $_product->getResource()->getAttribute("color");dynamisch machen ? Manchmal schicke ich Attributbezeichnungen aus dem
Farbbereich
check aktualisiert ans
Manashvi Birla
5

Es gibt nicht wirklich eine einfache Methode, die dies aufruft, aber dies sollte den Trick tun

$attribute = Mage::getModel('eav/entity_attribute')->loadByCode(Mage_Catalog_Model_Product::ENTITY, 'color');

$values = Mage::getResourceModel('eav/entity_attribute_option_collection')
    ->setAttributeFilter($attribute->getId())
    ->addFieldToFilter('tsv.value', 'Bleu')
    ->setStoreFilter(Mage::app()->getStore()->getId(), false)
    ->addFieldToSelect('option_id');
$values->getSelect()->limit(1);

var_dump($values->getFirstItem()->getId());

Beachten Sie, dass der Wert genau mit dem Etikett übereinstimmen muss, einschließlich Großbuchstaben usw.

Sander Mangel
quelle
3

Attributoptionswert abrufen

 getOptionvalue('your attribute code like color','your attribute label like blue');

    function getOptionvalue($arg_attribute, $arg_value) 
        {
            $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $arg_attribute);

            foreach ( $attribute->getSource()->getAllOptions(true, true) as $option )
            {

                if($arg_value == $option['label'])
                {

                    unset($attribute);
                    return $option['value'] ; 
                }
            }
Mufaddal
quelle
Ist es möglich, $ arg_attribute dort dynamisch abzurufen, da sich $ arg_value ändert (z. B. manchmal aus dem Farbbereich, manchmal vom Hersteller).
Amitshree
Ja, rufen Sie die Funktion getOptionvalue auf ('Farbe', blau). oder getOptionvalue ('Herstellung', 'irgendein Wert');
Mufaddal
1
Es ist keine gute Idee, alle Optionen zu durchlaufen - besonders wenn Sie viele davon haben.
Simon