Mam tablicę kodów atrybutów, które trzeba uzyskać wartości:Czy istnieje prostszy sposób uzyskania wartości frontend atrybutu?
$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');
Po iteracja kolekcji produktów otrzymuję wartości frontend atrybutów tak:
$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);
Simply użycie $product->getDate($attribute)
nie będzie działać z rozwijanymi i wielokrotnymi zaznaczeniami, po prostu zwraca ich identyfikator, a nie wartość frontendu.
Chociaż powyższy kod działa, wydaje się, że uzyskanie wartości jest dalekie, ale co ważniejsze, działa dość wolno. Czy istnieje szybszy/bardziej rozsądny sposób uzyskania wartości frontendu dla atrybutów produktu?
Edit
Mam teraz następujące (po kontaktach ze szczególnych przypadkach, takich jak image
i qty
), która jest nieco łatwiej na oczy i wydaje się działać szybciej (choć nie wiem dlaczego):
$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;
Jeśli ktokolwiek może to poprawić (spraw, aby był prostszy/bardziej wydajny), proszę napisać odpowiedź.
Spójrz na ten artykuł http://blog.chapagain.com.np/magento-how-to-get-attribute-name-and- value/ –
Dzięki, użyteczny artykuł. – Jamie