получить массив всех атрибутов продуктов в magento

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

Я пытаюсь получить список атрибутов продуктов в массив на странице 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 ничего возвращать.


person Chad    schedule 10.02.2011    source источник
comment
Вы пытались сначала получить коллекцию продуктов?   -  person KJYe.Name 葉家仁    schedule 10.02.2011
comment
Вы использовали пошаговую отладку с помощью отладчика, такого как XDebug?   -  person greg0ire    schedule 10.02.2011
comment
Вы запрашиваете значения атрибутов для этого конкретного продукта или список всех возможных кодов атрибутов?   -  person Jonathan Day    schedule 11.02.2011


Ответы (3)


Я предполагаю, что вам нужен список только видимых значений. Я говорю «значения», потому что атрибуты — это не фактические значения, а дескрипторы. Ниже приведены основные части из 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.

person clockworkgeek    schedule 11.02.2011
comment
это здорово и работает во внешнем интерфейсе, но я пытаюсь использовать это в файле Gallery.phtml в design/adminhtml/default/default/catalog/product/helper/ - есть идеи? Кажется, что невозможно получить переменную продукта таким же образом - person Chad; 16.02.2011
comment
Я разместил именно то, что я пытаюсь сделать в своем исходном посте. Надеюсь, вы можете помочь! - person Chad; 16.02.2011
comment
Поскольку вам на самом деле не нужны значения продукта, сработает ли это, если вы создадите пустой продукт с помощью Mage::getModel('catalog/product')? Это может не учитывать разные наборы атрибутов, я не уверен, как это выяснить. - person clockworkgeek; 16.02.2011

Согласно вашему вопросу, вместо этого вы должны использовать 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()), и вам не всегда нужно загружать продукт, чтобы получить его атрибуты.

person nevvermind    schedule 07.01.2013
comment
Gist с дружественным массивом для выбора. gist.github.com/jruzafa/8776453a13717ff7b5a1 - person jruzafa; 05.03.2015
comment
Спасибо за ответ! - person Adrian Moisa; 04.10.2016

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

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

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

$product->getAttributes();

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

Mage::getModel('catalog/product')->getCollection();
person Anton S    schedule 11.02.2011
comment
Также обратите внимание на то, что вам необходимо установить «Используется в списке продуктов» > «Да» в настройках атрибута. - person Nathan Fitzgerald - Fitzgenius; 14.01.2015
comment
Я получаю этот массив [0] => Массив ( [entity_id] => 12 [entity_type_id] => 4 [attribute_set_id] => 4 [type_id] => простой [sku] => 20707 [has_options] => 1 [required_options ] =› 1 [created_at] =› 2016-01-06 21:15:31 [updated_at] =› 2016-10-03 00:49:21 ) Как я могу получить дополнительные атрибуты, такие как имя, изображение продукта, описание и т. д. - person Sachin Vairagi; 07.12.2016