Question

J'ai eu ce code de , et cela fonctionne. Il y a une section de ce que je ne reçois cependant pas tout à fait,. S'il vous plaît voir les lignes [A] et [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;
}

La variable obtenue à partir des lignes [A] et [B], $attributeTable, ne semble pas être utilisé. Pourtant, si je commente ces deux lignes sur, le code ne fonctionne pas. Quelles sont ces lignes font et pourquoi font réellement $attributeTable pour?

Était-ce utile?

La solution

Vous vous trompez quand vous dites qu'ils sont « non utilisés ». Ils sont, en fait:

Cette ligne va chercher un attributeId de $:

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

Cette ligne se charge l'attribut:

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

Cette ligne utilise l'attribut $ dans un setter sur le attributeOptionModel de $:

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

getAllOptions exige que l'attribut a été réglé:

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

Je pense que lorsque vous obtenez trébuché est que $ attributeTable n'est pas utilisé, mais c'est juste la valeur de retour de la méthode setter. setters magiques dans Magento reviennent toujours l'objet parent de sorte que vous pouvez construire une interface fluide.

Autres conseils

Cette fonction retourne la valeur de l'attribut qui est cet attribut est de sélectionner ou multiple sélectionner. On peut écrire cette fonction similaire:

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;
}

Mais cela est loin et nous pouvons utiliser cet extrait pour récupérer la valeur d'attribut:

 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;
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top