Frage

Ich habe diesen Code von bekommen hier, und es funktioniert. Es gibt jedoch einen Teil davon, den ich nicht ganz bekomme. Bitte sehen Sie Zeilen [a] und [b].

public function attributeValueExists($attCode, $attributeValue)
{
    $attributeModel = Mage::getModel('eav/entity_attribute');
    $attributeOptionModel = Mage::getModel('eav/entity_attribute_source_table') ;

    $attributeId = $attributeModel->getIdByCode('catalog_product', $attCode);    // [A]
    $attribute = $attributeModel->load($attributeId);    // [B]

    $attributeTable = $attributeOptionModel->setAttribute($attribute);
    $options = $attributeOptionModel->getAllOptions(false);

    foreach($options as $option) {
        if ($option['label'] == $attributeValue) {
            return $option['value'];
        }
    }

    return false;
}

Die Variable, die aus Zeilen [a] und [b] erhalten wurde, $attributeTable, scheint nicht verwendet zu werden. Wenn ich diese beiden Zeilen jedoch kommentiere, funktioniert der Code nicht. Was machen diese Zeilen tatsächlich und warum tun? $attributeTable zum?

War es hilfreich?

Lösung

Sie irren sich, wenn Sie sagen, dass sie "nicht benutzt" sind. Sie sind in der Tat:

Diese Zeile holt einen $ attributeId:

$attributeId = $attributeModel->getIdByCode('catalog_product', $attCode);    // [A]

Diese Zeile lädt das Attribut:

$attribute = $attributeModel->load($attributeId);    // [B]

Diese Zeile verwendet das $ Attribut in einem Setter auf dem $ AttributeOptionModel:

$attributeTable = $attributeOptionModel->setAttribute($attribute);

Getalloptions erfordert, dass das Attribut festgelegt wurde:

$options = $attributeOptionModel->getAllOptions(false);

Ich denke, wo Sie gestolpert sind, ist, dass $ matrontutetable nicht verwendet wird, aber das ist nur der Rückgabewert der Setter -Methode. Magic Setter in Magento gibt immer das übergeordnete Objekt zurück damit Sie eine fließende Schnittstelle erstellen können.

Andere Tipps

Diese Funktion gibt den Attributwert zurück, das dieses Attribut ist, das ausgewählt oder mehrere ausgewählt wird. Wir können diese Funktion ähnlich schreiben:

public function attributeValueExists($attCode, $attributeValue)
{
    $attributeModel = Mage::getModel('eav/entity_attribute');
    $attributeOptionModel = Mage::getModel('eav/entity_attribute_source_table') ;

    //retrieve attribute_id using attribute_code
    $attributeId = $attributeModel->getIdByCode('catalog_product', $attCode);    // [A] 
    //load attribute model using attribute_id
    $attribute = $attributeModel->load($attributeId);    // [B] 

    $options = $attributeOptionModel->setAttribute($attribute)->getAllOptions(false);

    foreach($options as $option) {
        if ($option['label'] == $attributeValue) {
            return $option['value'];
        }
    }

    return false;
}

Dies ist jedoch ein langer Weg und wir können dieses Snippet verwenden, um den Attributwert abzurufen:

 public function attributeValueExists($attCode, $attributeValue)
 {
     /**
     * @var $attribute Mage_Eav_Model_Entity_Attribute_Abstract
     */
    $attribute = Mage::getModel('catalog/resource_eav_attribute')
        ->loadByCode(Mage_Catalog_Model_Product::ENTITY, $attCode);

    $options   = $attribute->getSource()->getAllOptions();
    foreach ($options as $option) {
        if ($option['label'] == $attributeValue) {
            return $option['value'];
        }
    }
    return false;
 }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top