получить массив всех атрибутов товаров в Magento
Я не могу этого понять!
Я пытаюсь получить список атрибутов продуктов в массиве в списке.страница 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;
}
}
Это в галерее файлов.phtml in design / adminhtml / default / default / каталог / продукт / помощник /
По какой-то причине я не могу заставить функцию getAttributeCode возвращать что-либо.
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
.
В соответствии с вашим вопросом, вы должны использовать
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()
) хранение и вам не всегда нужно загружать продукт, чтобы получить его атрибуты.
Это довольно просто и дает вам массив доступных имен атрибутов продукта
$product = Mage::getModel('catalog/product')->load('product_id'); $attributeNames = array_keys($product->getData()); print_r($attributeNames);
Если вам нужна коллекция объектов атрибутов, вы можете вызвать
$product->getAttributes();
Если вам нужна коллекция продуктов и после этого вы можете выполнить ранее упомянутые способы на каждом члене коллекции
Mage::getModel('catalog/product')->getCollection();