2009-12-29 79 views
3

類似於在問這樣一個問題: Magento - Show Custom Attributes in Grouped Product table所有Addtional的屬性分組的產品在Magento

我想在組合產品頁面顯示簡單的產品的屬性。

但是,我需要它的工作,以便您不明確指定顯示哪些屬性。相反,它會顯示在該產品的簡單產品視圖上顯示的所有屬性。

我試過的變化:

(從/template/catalog/product/view/type/grouped.phtml)

<?php foreach ($_associatedProducts as $_item): ?> 
    <tr> 
      <td><?php echo $this->htmlEscape($_item->getName()) ?></td> 

    <!-- important problem part --> 
    <?php foreach ($_item->getAttributes() as $arr): ?> 
    <td><?php echo $arr->getData() ?></td> 
    <?php endforeach; ?> 
    <!-- end of problem part --> 

      <td class="a-right"> 
       <?php echo $this->getPriceHtml($_item, true) ?> 
      </td> 
      <?php if ($_product->isSaleable()): ?> 
      <td class="a-center"> 
      <?php if ($_item->isSaleable()) : ?> 
    <a href="<?php echo $_item->getUrlPath() ?>">View</a> 
      <?php else: ?> 
       <p class="availability"><span class="out-of-stock"><?php echo $this->__('Out of stock.') ?></span></p> 
      <?php endif; ?> 
      </td> 
      <?php endif; ?> 
     </tr> 
    <?php endforeach; ?> 

和其他變化,但是,我不能限制屬性被顯示爲我需要的那些(即,僅在簡單產品視圖中顯示的附加屬性;在前端上設置爲Viewable)。有任何想法嗎?

回答

1

類Mage_Catalog_Block_Product_View_Attributes方法getAdditionalData()應該指示您如何將變量限制爲僅在Front View上選擇爲Viewable的變量。它的getAdditionalData方法在產品視圖塊中被引用。

解決此問題的步驟如下: 1.創建一個新的Magento模塊,意圖覆蓋分組產品模塊。 2.創建新的分組產品塊,從Mage_Catalog_Block_Product_View_Attributes的getAdditionalData()方法中自由竊取。 3.基於/template/catalog/product/view/type/grouped.phtml創建一個新模板以備份您的自定義塊。 4.覆蓋模塊的config.xml中的塊(請參閱:Overriding catalog/breadcrumbs and catalog/products/view,Magento論壇)

這會導致目錄中的所有分組產品都會以這種方式運行。如果您需要更具選擇性,那麼我認爲合理的做法是向產品目錄添加自定義屬性(最好在您剛剛創建的自定義模塊中進行設置!),以便切換行爲並設置檢查爲那切換到您的模板。

1

添加後$_product = $this->getProduct();

/* CODE TO GET ATTRIBUTES */ 
$gridattributes = array(); 
$attributes = $_product->getAttributes(); 
foreach ($attributes as $attribute) { 
    if ($attribute->getIsVisibleOnFront() && !in_array($attribute->getAttributeCode(), $excludeAttr)) { 
    $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)) { 
     $gridattributes[$attribute->getAttributeCode()] = array(
     'label' => $attribute->getStoreLabel(), 
     'value' => $value, 
     'code' => $attribute->getAttributeCode() 
    ); 
    } 
    } 
} 
?> 

添加<th><?php echo $this->__('Product Name') ?></th>後:

foreach($gridattributes as $attrib){ 
    echo '<th>'.$this->htmlEscape($attrib[label]).'</th>'; 
} 

添加<td><?php echo $this->htmlEscape($_item->getName()) ?></td>後:

foreach($gridattributes as $attribname=>$attribval){ 
    echo '<td>'.$this->htmlEscape($_item->getData($attribname)).'</td>'; 
}