Получить массив всех атрибутов продуктов в magento
Я не могу понять это!
Я пытаюсь получить список атрибутов продуктов в массиве на странице list.phtml. Я все пробовал. Я видел много решений, которые используют
$attributes = $product->getAttributes();
но я не могу заставить это работать, он просто выводит пустую страницу. Любая помощь будет принята с благодарностью, я потратил часы и часы на это до сих пор...
Я использую Magento версии 1.4.2.0
UPDATE: вот что я пытаюсь сделать:
$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 ничего не возвращать.
Ответы
Ответ 1
Я предполагаю, что вам нужен список только видимых значений. Я говорю "значения", потому что атрибуты не являются фактическими значениями, они являются дескрипторами. Ниже приведены основные части от 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
.
Ответ 2
В соответствии с вашим вопросом вы должны использовать 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()
), и вам не всегда нужно загружать продукт, чтобы получить его атрибуты.
Ответ 3
Это довольно легко и дает вам массив доступных имен атрибутов продукта
$product = Mage::getModel('catalog/product')->load('product_id');
$attributeNames = array_keys($product->getData());
print_r($attributeNames);
Если вам нужна коллекция объектов атрибута, вы можете вызвать
$product->getAttributes();
Если вам нужна коллекция продуктов, и после этого вы можете выполнить указанные выше способы для каждого члена коллекции
Mage::getModel('catalog/product')->getCollection();