get an array of all a products attributes in magento

巧了我就是萌 提交于 2019-12-09 04:39:28

问题


I cannot figure this out!

I am trying to get a list of a products attributes into an array on the list.phtml page. I have tried everything. I have seen a lot of solutions that use

$attributes = $product->getAttributes();

but I cannot get this to work, it just brings up a blank page. Any help would be greatly appreciated, I have spent hours and hours on this so far...

I am using Magento version 1.4.2.0

UPDATE: Here is exactly what I am trying to do:

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

this is in the file gallery.phtml in design/adminhtml/default/default/catalog/product/helper/

For some reason, I cannot get the getAttributeCode function to return anything.


回答1:


I'm guessing you need a list of only visible values. I say "values" because attributes are not the actual values, they are descriptors. The following is the salient parts from 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
    }
}

You don't really need to duplicate this though since you can alter/use the template catalog/product/view/attributes.phtml which is already declared on the product view page as attributes block.




回答2:


According to your question, you should be using Mage::getResourceModel('catalog/product_attribute_collection') instead:

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

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

You don't always have attributes in the _data (getData()) storage and you don't always need to load a product to get its attributes.




回答3:


It's rather easy and gives you an array of available product attribute names

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

If you need a attribute object collection you can call

$product->getAttributes();

If you need a product collection and after that you can perform the previously mentioned ways on each collection member

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


来源:https://stackoverflow.com/questions/4961117/get-an-array-of-all-a-products-attributes-in-magento

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!