Magento製品のカスタム属性と対応する値を取得

3678 ワード

製品プロパティをカスタマイズすると、通常、製品表示ページに表示されるかどうかを設定できます.プロパティはadditional informationに表示されます.しかし、ここでは分類リストページで製品固有のプロパティを呼び出す必要があります.
 
リストページで対応する製品のidをループして取得した後、直接製品のすべての属性内容を出力するのは多すぎて、getDataなどの取り出した情報はまた簡潔すぎます.とにかく使い心地が悪いのでapp/code/core/Mage/Catalog/Block/Product/View/ATtributes.phpのgetAdditionalDataメソッドは簡単に変更されましたが、新しいメソッドはgetAdditionalDataと同じファイルに保存されます.継承メソッドがあるためです.コードは次のとおりです.
public function getMeSetData($t_product)
{
    $data = array();
    $product = $t_product;
    $attributes = $product->getAttributes();
    foreach ($attributes as $attribute) {
        $value = $attribute->getFrontend()->getValue($product);
 
        if (!$product->hasData($attribute->getAttributeCode())) {
            $value = Mage::helper('catalog')->__('N/A');
        } elseif ((string)$value == '') {
            $value = Mage::helper('catalog')->__('No');
        } elseif ($attribute->getFrontendInput() == 'price' && is_string($value)) {
            $value = Mage::app()->getStore()->convertPrice($value, true);
        }
 
        if (is_string($value) && strlen($value)) {
            $data[$attribute->getAttributeCode()] = array(
                'label' => $attribute->getStoreLabel(),
                'value' => $value,
                'code'  => $attribute->getAttributeCode()
            );
        }
    }
    return $data;
}
 
こちらのパラメータは製品オブジェクトであることがわかりますが、テストの際、リストページで直接使用する製品オブジェクト情報が不十分で、この方法も使用できないことがわかりましたので、製品idを取得してから対応する製品を再ロードし、呼び出し方法は以下の通りです.
$p_id = $_product->getId();
$_product = Mage::getModel('catalog/product')->load($p_id);
$p_attrs = Mage::getBlockSingleton('catalog/product_view_attributes')->getMeSetData($_product);
print_r($p_attrs);
 
このように取り出した製品の属性情報は比較的完全であり,あまり肥大化しない.具体的な用途はそれぞれ必要なものを取りましょう
 
 
ソース:http://vsfor.com/archives/323
 
 
最も包括的:
$attributes = Mage::getSingleton('eav/config')->getEntityType(Mage_Catalog_Model_Product::ENTITY)->getAttributeCollection();

// Localize attribute label (if you need it)
$attributes->addStoreLabel(Mage::app()->getStore()->getId());

// Loop over all attributes
foreach ($attributes as $attr) {
    /* @var $attr Mage_Eav_Model_Entity_Attribute */
    // get the store label value
    $label = $attr->getStoreLabel() ? $attr->getStoreLabel() : $attr->getFrontendLabel();
    echo "Attribute: {$label}
<br>"; // If it is an attribute with predefined values if ($attr->usesSource()) { // Get all option values ans labels $options = $attr->getSource()->getAllOptions(); // Output all option labels and values foreach ($options as $option) { echo "&nbsp;&nbsp;&nbsp;&nbsp;{$option['label']} =========> (Value {$option['value']})
<br>"; } } else { // Just for clarification of the debug code echo " No select or multiselect attribute
<br>"; } }
 
ソース:http://stackoverflow.com/questions/9275826/how-to-get-all-active-attributes-of-products-in-magento