Как получить все активные атрибуты продуктов в Magento? - PullRequest
3 голосов
/ 14 февраля 2012

Я работаю в новом модуле «Фильтр по продукту» в Magento, у меня есть ситуация, когда я должен получить все атрибуты и их значения. Я гуглил это и нашел следующий код

 
$product = Mage::getModel('catalog/product');

$attributes = Mage::getResourceModel('eav/entity_attribute_collection')
      ->setEntityTypeFilter($product->getResource()->getTypeId())
      ->load();

      //      ->addFieldToFilter('attribute_code', 'color') 

$attribute = $attributes->getFirstItem()->setEntity($product->getResource());

/* @var $attribute Mage_Eav_Model_Entity_Attribute */

$attr = $attribute->getSource()->getAllOptions(true);

foreach ($attr as $att) {
    echo " Label : ".$att['label']." Value : ".$att['value']."";
}
 

, но при этом извлекаются только метка и значение последнего атрибута из списка всех доступных атрибутов.

как мне получить все атрибуты? что я делаю не так в этом коде?

Спасибо, Балан

Ответы [ 2 ]

14 голосов
/ 14 февраля 2012

Попробуйте это:

$attributes = Mage::getSingleton('eav/config')
    ->getEntityType(Mage_Catalog_Model_Product::ENTITY)->getAttributeCollection();

// Localize attribute label (if you need it)
$attributes->addStoreLabel(Mage::app()->getStore()->getId());

// Loop over all attributes
foreach ($attributes as $attr) {
    /* @var $attr Mage_Eav_Model_Entity_Attribute */
    // get the store label value
    $label = $attr->getStoreLabel() ? $attr->getStoreLabel() : $attr->getFrontendLabel();
    echo "Attribute: {$label}\n";

    // If it is an attribute with predefined values
    if ($attr->usesSource()) {

        // Get all option values ans labels
        $options = $attr->getSource()->getAllOptions();

        // Output all option labels and values
        foreach ($options as $option)
        {
            echo "    {$option['label']} (Value {$option['value']})\n";
        }
    }
    else
    {
        // Just for clarification of the debug code
        echo "    No select or multiselect attribute\n";
    }
}
0 голосов
/ 14 февраля 2012

Это первое решение:

 $products = Mage::getModel('catalog/product')->getCollection();
 foreach($this->products as $product) {
   $prod = Mage::getModel('catalog/product')->load($product->getId());
 }

Если вы используете данные извне magento, вы можете использовать класс, который я создал: http://blog.alexparadise.com/magento-dbeav-class/

Это бета, но это должно работать в вашем случае. Или получите представление о таблице EAV ... и создайте собственный запрос SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...