получить массив всех атрибутов продуктов в magento - PullRequest
13 голосов
/ 10 февраля 2011

Я не могу понять это!

Я пытаюсь получить список атрибутов товаров в массив на странице list.phtml. Я перепробовал все. Я видел много решений, которые используют

$attributes = $product->getAttributes();

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

Я использую Magento версии 1.4.2.0

ОБНОВЛЕНИЕ: Вот именно то, что я пытаюсь сделать:

$neededAttributes = Mage::helper('mymodule')->getNeededAttributes();
$attributes = $product->getAttributes();
foreach ($attributes as $attribute) {
   if(in_array($attribute->getAttributeCode(), $neededAttributes)) { 
      $attributename = $attribute->getAttributeCode();
  echo $attributename;
   }
 }

это находится в файле gallery.phtml в design / adminhtml / default / default / catalog / product / helper /

По некоторым причинам я не могу заставить функцию getAttributeCode возвращать что-либо.

Ответы [ 3 ]

23 голосов
/ 11 февраля 2011

Полагаю, вам нужен список только видимых значений. Я говорю «значения», потому что атрибуты не фактические значения, они дескрипторы. Ниже приведены характерные части от Mage_Mage_Catalog_Block_Product_View_Attributes:

$attributes = $product->getAttributes();
foreach ($attributes as $attribute) {
    if ($attribute->getIsVisibleOnFront()) {
        $value = $attribute->getFrontend()->getValue($product);
        // do something with $value here
    }
}

Вам на самом деле не нужно дублировать это, поскольку вы можете изменить / использовать шаблон catalog/product/view/attributes.phtml, который уже объявлен на странице просмотра продукта как блок attributes.

14 голосов
/ 07 января 2013

Согласно вашему вопросу, вы должны использовать Mage::getResourceModel('catalog/product_attribute_collection') вместо:

$productAttrs = Mage::getResourceModel('catalog/product_attribute_collection');

foreach ($productAttrs as $productAttr) { /** @var Mage_Catalog_Model_Resource_Eav_Attribute $productAttr */
    var_dump($productAttr->getAttributeCode());
}

У вас не всегда есть атрибуты в хранилище _data (getData()), и вам не всегда нужно загружать продукт, чтобы получить его атрибуты.

7 голосов
/ 11 февраля 2011

Это довольно просто и дает вам массив доступных имен атрибутов продукта

$product = Mage::getModel('catalog/product')->load('product_id');
$attributeNames = array_keys($product->getData());
print_r($attributeNames);

Если вам нужна коллекция объектов атрибутов, вы можете позвонить

$product->getAttributes();

Если вам нужен набор продуктов и после этого вы можете выполнить вышеупомянутые способы для каждого члена коллекции

Mage::getModel('catalog/product')->getCollection();
...