回答:
簡単な修正:
で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;
}
2つの// 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コードは、すべての言語で属性値が「No」または「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(このモジュールの開発者)
多くの異なる製品属性を持ちたいが、デフォルトの属性セットのみが必要なストアに出くわすことがあります。これは、すべての製品に、特定の製品には適用されない場合がある10以上のオプションがあることを意味します。たとえば、衣服にはサイズ属性が必要な場合がありますが、家具には必要ありません。ストアは各製品に同じ属性セットを使用するため、空のサイズ属性は次のように表示されます。
もちろん、これは顧客にとって非常に混乱しやすいため、空の属性値を非表示にすることをお勧めします。これは、小さなコードで実行できます。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; ?>
それでおしまい!空の属性は製品ページから非表示になります。キャッシュを更新して変更を確認することを忘れないでください。
SOurce:https : //tejabhagavan.blogspot.in/2016/03/hide-magento-attributes-with-no-value-2.html