magentoテンプレートで空の属性を非表示にする方法は?


12

magentoテンプレートのカスタム属性を非表示にします。私のmagentoバージョンは1.8.1です

ブランド、ディメンション、製品タイプなどの製品のカスタム属性を追加しましたが、これらの属性に値を追加しない場合がありました。magentoでは、製品ビューページに「いいえ」または「なし」と表示されます。

そのため、テンプレート内の空の属性または値のない属性を非表示にする必要があります。


(どの属性?どこ?)を支援するために、さらに多くの情報が必要になります
ベンチマーク14

回答:


7

簡単な修正:

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を試してください


テンプレートファイルを変更する最初のソリューションは問題ありませんが、2つの問題があります。最初に、値がNoに設定された属性タイプYes / Noがある場合、それはOKではないフロントエンドで非表示になります。第二に、属性がない場合、OKでない追加情報ヘッダーが表示されます。属性がない場合、そのヘッダーは表示されません。
ADDISON74

6

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/


4

正確にはわかりませんが、どこかで読んでいます。

「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; ?>

1
ソリューションは、N / A値を持つ唯一の属性タイプdatetimeのみを非表示にします。テキストフィールド、テキストエリア、複数選択、ドロップダウンには値がありません。attribyteタイプがdatetimeで、値がNoに設定されている場合、非表示ではなく表示されます。
ADDISON74

1

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; ?>

2
ベーステンプレートを変更しないでください...
Jelle Siderius

1

カスタムテーマで、次の場所に移動します。 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が追加され、配列内にあるかどうかのチェックがコードに追加されました。

フロントエンドに変更を加えた後は、必ずキャッシュを空にしてください。


私のためにコードの上で動作していません
宝石

1

これは、小さなコードで実行できます。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; ?>

0

問題解決:)解決策はこちら:http : //www.magentocommerce.com/boards%20/viewthread/294064/#t407742

このモジュールはmagento 1.8.1で正常に機能します。モジュールを購入したり、コードを編集したりする必要はありません。

おかげでNiro(このモジュールの開発者)


1
リンクが壊れていますライブリンクの更新を知ることができますか?
ムーン

4
またはさらに良い:ここに正しい答えを投稿してください。新しいリンクが再び壊れます
...-simonthesorcerer

0

簡単な方法ですが、他の方法よりも優れている必要はありません。

翻訳ファイルを更新しますMage_Catalog.csv。以下のように空の値を設定します。

N/A,""
No,""

いいえまたはN / Aの場合、フロントエンド属性は無視されます。


0

多くの異なる製品属性を持ちたいが、デフォルトの属性セットのみが必要なストアに出くわすことがあります。これは、すべての製品に、特定の製品には適用されない場合がある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; ?>

それでおしまい!空の属性は製品ページから非表示になります。キャッシュを更新して変更を確認することを忘れないでください。

SOurcehttps : //tejabhagavan.blogspot.in/2016/03/hide-magento-attributes-with-no-value-2.html


コードの上で動作していない
宝石
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.