3

类似于在以下位置提出的问题: 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; ?>

然而,和其他变体,我不能将显示的属性限制为我需要的属性(即仅显示在简单产品视图上的附加属性;那些在前端设置为可查看的属性)。有任何想法吗?

4

2 回答 2

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>';
}
于 2011-04-22T23:07:02.273 回答
1

Mage_Catalog_Block_Product_View_Attributes 类方法 getAdditionalData() 应该指出如何将变量限制为仅在前端被选为可查看的变量。它的 getAdditionalData 方法在产品视图块中被引用。

解决此问题的步骤如下: 1. 创建一个新的 Magento 模块,以覆盖分组的产品块。2. 创建新的分组产品块,大量窃取 Mage_Catalog_Block_Product_View_Attributes 的 getAdditionalData() 方法。3. 基于 /template/catalog/product/view/type/grouped.phtml 创建一个新模板来支持您的自定义块。4. 覆盖模块的 config.xml 中的块(请参阅:覆盖目录/面包屑和目录/产品/视图,Magento 论坛)

这会导致目录中的所有分组产品都以这种方式运行。如果您需要更有选择性,那么我认为合理的做法是向目录产品添加自定义属性(最好在您刚刚创建的自定义模块中设置!)以切换行为并编写检查用于切换到您的模板。

于 2011-01-24T21:50:31.813 回答