Answers:
快速修复:
进入app/[mypackage]/[mytheme]/template/catalog/product/view/attributes.phtml
(或从基本主题或默认自定义主题复制此文件到主题中):
<?php foreach ($_additional as $_data):
// Add these 2 lines
$_test_data_value = trim($_data['value']);
if ((empty($_test_data_value) || in_array($_test_data_value, array(Mage::helper('catalog')->__('N/A'), Mage::helper('catalog')->__('No'))))) continue;?>
以下不是实现您所要求的内容的必要条件:
这些属性仍然被加载。要对此进行优化(如果属性集中有大量属性),请执行以下操作:
public function getAdditionalData(array $excludeAttr = array())
{
$data = array();
$product = $this->getProduct();
$attributes = $product->getAttributes();
foreach ($attributes as $attribute) {
// if ($attribute->getIsVisibleOnFront() && $attribute->getIsUserDefined() && !in_array($attribute->getAttributeCode(), $excludeAttr)) {
if ($attribute->getIsVisibleOnFront() && !in_array($attribute->getAttributeCode(), $excludeAttr)) {
// Fix:
//$value = $attribute->getFrontend()->getValue($product);
if (!$product->hasData($attribute->getAttributeCode())) {
$value = Mage::helper('catalog')->__('N/A');
}
// Fix:
elseif ((string) ($value = $attribute->getFrontend()->getValue($product)) == '') {
$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;
}
请注意两个// Fix:
注释。
此修改的函数来自Mage_Catalog_Block_Product_View_Attributes
。您需要从模块中将上述函数复制到您的块类中。您的块类将重写核心块类。应用此功能将大大改善前端的产品视图页面加载。
如果您不知道如何在本地目录中创建自定义模块,则可以搜索有关如何创建Magento模块以及如何重写核心块类的教程。或尝试http://www.magentocommerce.com/magento-connect/ultimate-module-creator.html。
查找并打开attributes.phtml文件。该文件可以在这里找到:
/app/design/frontend/[YOUR PACKAGE]/[YOUR THEME]/template/catalog/product/view/attribute.phtml
打开文件并搜索以下行:
<?php foreach ($_additional as $_data): ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
用以下代码行替换整个foreach循环:
<?php foreach ($_additional as $_data): ?>
<?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php } ?>
<?php endforeach; ?>
来源:http://codingbasics.net/hide-magento-attributes-value/
来源:http://www.magthemes.com/magento-blog/empty-attributes-showing-na-fix/
我不知道确切的信息,但是我已经在某处阅读了。
通过仅编辑名为“ attributes.phtml”的模板文件来隐藏空属性。
在您的代码中,找到以下几行:
<?php foreach ($_additional as $_data): ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
并将这些行替换为:
<?php foreach ($_additional as $_data): ?>
<?php if ((string)$_data['value'] != '' and $_data['value'] != 'N/A'): ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
在app / design / frontend / base / default / template / catalog / product / view / attributes.phtml中更改以下代码:
从:
<?php foreach ($_additional as $_data): ?>
<tr>
<th class="label"><?php echo $this->escapeHtml($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
至:
<?php foreach ($_additional as $_data): ?>
<?php if ($_product->getAttributeText($_data['code']) == '') continue; ?>
<tr>
<th class="label"><?php echo $this->escapeHtml($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
在您的自定义主题中,导航到:catalog\product\view\attributes.phtml
。您的PHP代码应检查所有语言的属性值是“否”还是“ N / A”。这将不会使用这些值来呈现属性。
该代码将如下所示:
<?php
$_helper = $this->helper('catalog/output');
$_product = $this->getProduct();
$emptyValues = array($this->__('N/A'), $this->__('No'));
?>
<?php if($_additional = $this->getAdditionalData()): ?>
<h2><?php echo $this->__('Additional Information') ?></h2>
<table class="data-table" id="product-attribute-specs-table">
<col width="25%" />
<col />
<tbody>
<?php foreach ($_additional as $_data): ?>
<?php if(!in_array($_data['value'], $emptyValues)): ?>
<tr>
<th class="label"><?php echo $this->escapeHtml($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
</tbody>
</table>
<script type="text/javascript">decorateTable('product-attribute-specs-table')</script>
<?php endif;?>
变量$emptyValues
被添加,并且检查它是否在数组中已被添加到代码中。
对前端进行更改后,请确保清空缓存。
只需一小段代码即可完成。查找并打开attributes.phtml
文件。该文件可以在这里找到:/app/design/frontend/[theme name]/[package name]/template/catalog/product/view/attribute.phtml
打开文件并搜索以下行:
<?php foreach ($_additional as $_data): ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
用以下代码行替换整个foreach循环:
<?php foreach ($_additional as $_data): ?>
<?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php } ?>
<?php endforeach; ?>
解决的问题:)解决方案在这里:http : //www.magentocommerce.com/boards%20/viewthread/294064/#t407742
该模块可与magento 1.8.1配合使用,无需购买模块或编辑任何代码。
感谢Niro(此模块的开发人员)
简单的方法,但没有必要比别人更好。
更新您的翻译文件Mage_Catalog.csv
。如下设置空值。
N/A,""
No,""
否或不适用时,前端属性将被忽略。
有时我们遇到一家想要拥有许多不同商品属性的商店,但他们只想要默认属性集。这意味着每个产品都会有10个以上的选项,这些选项有时不适用于某些产品。例如,一件衣服可能需要size属性,而一件家具则不需要。因为商店对每种产品使用相同的属性集,所以空尺寸属性将显示如下:
当然这对于客户来说非常令人困惑,因此更好的选择是隐藏为空的属性值。只需一小段代码即可完成。查找并打开attributes.phtml
文件。该文件可以在这里找到:app/design/frontend/default/[theme name]/template/catalog/product/view/attribute.phtml
打开文件并搜索以下行:
<?php foreach ($_additional as $_data): ?>
<?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php } ?>
<?php endforeach; ?>
用以下代码行替换整个foreach循环:
<?php foreach ($_additional as $_data): ?>
<?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php } ?>
<?php endforeach; ?>
而已!空属性现在将从您的产品页面中隐藏。不要忘记刷新缓存以查看更改。
来源:https : //tejabhagavan.blogspot.in/2016/03/hide-magento-attributes-with-no-value-2.html