Est-il un moyen plus simple pour obtenir un attribut du frontend de la valeur?
J'ai un tableau d'attribut (codes dont j'ai besoin pour obtenir les valeurs de:
$attributes = array(
'Category' => 'type',
'Manufacturer' => 'brand',
'Title' => 'meta_title',
'Description' => 'description',
'Product Link' => 'url_path',
'Price' => 'price',
'Product-image link' => 'image',
'SKU' => 'sku',
'Stock' => 'qty',
'Condition' => 'condition',
'Shipping cost' => 'delivery_cost');
Après une itération à travers une collection de produits-je obtenir le frontend valeurs des attributs comme:
$attributeId = Mage::getResourceModel('eav/entity_attribute')
->getIdByCode('catalog_product', $attribute_code);
$attribute = Mage::getModel('catalog/resource_eav_attribute')
->load($attributeId);
$value = $attribute->getFrontend()->getValue($product);
Simplement à l'aide de $product->getDate($attribute)
de ne pas travailler avec des listes déroulantes et multi-sélections, il renvoie simplement leur carte d'identité et de ne pas leur frontend valeur.
Alors que le code ci-dessus fonctionne, il semble être un long chemin autour de l'obtention de la valeur, mais plus important encore, il fonctionne très lente. Est-il plus rapide/plus raisonnable de manière à obtenir le frontend valeurs pour les attributs d'un produit?
Modifier
J'ai maintenant la suivante (après avoir fait face à des cas particuliers comme image
et qty
) qui est un peu plus facile sur les yeux et ne semblent courir plus vite (bien que je ne sais pas pourquoi):
$inputType = $product->getResource()
->getAttribute($attribute_code)
->getFrontend()
->getInputType();
switch ($inputType) {
case 'multiselect':
case 'select':
case 'dropdown':
$value = $product->getAttributeText($attribute_code);
if (is_array($value)) {
$value = implode(', ', $value);
}
break;
default:
$value = $product->getData($attribute_code);
break;
}
$attributesRow[] = $value;
Si quelqu'un peut améliorer cela (il est plus simple/plus efficace), merci de poster une réponse.
OriginalL'auteur Jamie | 2011-08-18
Vous devez vous connecter pour publier un commentaire.
Pour les listes déroulantes et multiselects et uniquement avec des produits (ce n'est pas un général EAV truc), vous pouvez utiliser
getAttributeText()
.OriginalL'auteur clockworkgeek
Dans la version 1.7,
$product->getAttributeText($attribute_code)
ne fonctionne pas pour moi sur la page du produit. Au début, je pensais que c'était parce que l'attribut n'était pas dans le catalog_product_flat index. Mais il s'est avéré que l'attribut était là. Dans tous les cas, le code suivant fonctionne pour moi. J'ai essayer le code simple, avant de retomber sur la VAE code.Donc je suis en utilisant un code comme ceci:
getValue($product)
était de retour'No'
. J'ai changé$product
àMage::getModel('catalog/product')->load($product->getEntityId())
et a obtenu un produit dont les méthodes irait à la base de données. Sinon, le code devrait essayer d'obtenir les données à partir de son intérieur tableau de valeurs. Dans des circonstances normales, j'attends le code ci-dessus fonctionne très bien.OriginalL'auteur Buttle Butkus
Il dépend de la façon dont vous avez configuré l'attribut (est-il accessible à partir du contexte que vous essayez d'atteindre?), mais la façon la plus simple est généralement de cette façon (pour meta_title, par exemple):
OriginalL'auteur Dave Child