2 Stimmen

Hinzufügen von Attributoptionen programmgesteuert sind nicht sofort verfügbar zur Verwendung

Ich erstelle Magento-Attributoptionen über ein Skript, aber dann muss ich die neue ID abrufen und sie sofort im selben Skript verwenden können.

Im Moment wird die ID nicht übernommen - wenn ich das Skript beende und neu starte, erkennt es die erstellte Option und gibt die ID zurück, jedoch nicht als Teil des gleichen Skripts.

Hier ist der Code, den ich verwende:

   $attr = Mage::getModel('catalog/product')->getResource()->getAttribute($key);
   if ($attr->usesSource()) {
           $vattr_id = $attr->getSource()->getOptionId($value);
   }else{
           echo "Keine Quelle";
           $vattr_id = false;
   }

if($vattr_id){
        return $vattr_id;
}else{

        $attr_model = Mage::getModel('catalog/resource_eav_attribute');
        $attr = $attr_model->loadByCode('catalog_product', $key);
        $attr_id = $attr->getAttributeId();

        $option['attribute_id'] = $attr_id;
        $option['value'][$value][0] = $value;
        $option['value'][$value][1] = $value;

        $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
        $setup->addAttributeOption($option);
        $attr = Mage::getModel('catalog/product')->getResource()->getAttribute($key);
        if ($attr->usesSource()) {
               $vattr_id = $attr->getSource()->getOptionId($value);
                echo "AttrID: $vattr_id";
        }

}

Wenn Sie dies ausführen (mit dem erforderlichen Mage::app() usw.), wird die Option erstellt und im Magento-Backend angezeigt, aber die $vattr_id ist NULL. Wenn ich das Skript neu lade, findet es die Attributoption in diesem ersten Block, wie es sollte.

Ich vermute, es hat etwas mit der Art und Weise zu tun, wie Magento die Modelle zwischenspeichert, bin mir aber nicht sicher, wo ich nachsehen muss, um diese zu löschen?

4voto

Victor Nazarov Punkte 126
function getAttributeOptionId($attributeName, $attributeValue) {

    /* @var $attribute Mage_Eav_Model_Entity_Attribute */
    $attribute = Mage::getModel("eav/entity_attribute")->loadByCode("catalog_product", $attributeName);

    // Überprüfung des Attributcodes
    if ($attribute->getId()) {
        $source = $attribute->getSource();
        $options = $source->getAllOptions();

        // Suche nach vorhandener ID
        foreach ($options as $optionValue) {
            if ($attributeValue == $optionValue["label"]) {
                return $optionValue["value"];
            }
        }

        // Erstellen einer neuen Option
        $addOptionData = array(
            "attribute_id" => $attribute->getId(),
            "value" => array(array($attributeValue))
        );

        $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
        $setup->addAttributeOption($addOptionData);

        // neue ID abrufen
        $attribute = Mage::getModel("eav/entity_attribute")->loadByCode("catalog_product", $attributeName);
        $source = $attribute->getSource();
        $options = $source->getAllOptions();

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

    return null;
}

echo getAttributeOptionId("brand", "Intel");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X