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.

Jetez un oeil à cet article blog.chapagain.com.np/...
Merci, article utile.

OriginalL'auteur Jamie | 2011-08-18