вземете масив от всички атрибути на продукти в 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] =› simple [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