Bagaimana cara menyembunyikan atribut kosong di template magento?

12

Saya ingin menyembunyikan atribut khusus di templat magento. Versi magento saya adalah 1.8.1

Kami telah menambahkan atribut khusus untuk produk kami seperti merek, dimensi, jenis produk, dll. Tetapi terkadang kami tidak menambahkan nilai dalam atribut ini. magento menunjukkan No atau N / A di halaman tampilan produk.

Jadi, kami ingin menyembunyikan atribut yang kosong atau tidak memiliki nilai di templat.

Bingkai kunci
sumber
Kami akan membutuhkan lebih banyak informasi untuk membantu (atribut mana? Di mana?)
tanda

Jawaban:

7

Perbaikan cepat:

Di app/[mypackage]/[mytheme]/template/catalog/product/view/attributes.phtml(atau salin file ini di tema Anda dari basis atau tema khusus default):

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

Di bawah ini tidak perlu untuk mencapai apa yang Anda minta:

Atribut-atribut itu masih dimuat. Untuk mengoptimalkan ini (jika Anda memiliki sejumlah besar atribut di set atribut) lakukan:

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

Perhatikan kedua // Fix:komentar tersebut.

Fungsi yang dimodifikasi ini dari Mage_Catalog_Block_Product_View_Attributes. Anda perlu menyalin fungsi di atas dalam kelas blok Anda dari modul Anda. Kelas blok Anda menulis ulang kelas blok inti. Menerapkan ini akan meningkatkan pemuatan halaman tampilan produk di frontend.

Jika Anda tidak tahu cara membuat modul khusus dalam direktori lokal daripada cari tutorial tentang cara membuat modul Magento dan cara menulis ulang kelas blok inti. Atau coba http://www.magentocommerce.com/magento-connect/ultimate-module-creator.html .

mengaburkan
sumber
Solusi pertama mengubah file templat baik-baik saja, tetapi ada dua masalah. Pertama jika ada tipe atribut Ya / Tidak dengan nilai diatur ke Tidak, itu akan disembunyikan di frontend yang tidak OK. Kedua jika tidak ada atribut Anda akan mendapatkan informasi tambahan header yang tidak OK. Jika tidak ada atribut yang header tidak akan muncul.
ADDISON74
6

Temukan dan buka file atribut.phtml . File ini dapat ditemukan di sini: /app/design/frontend/[YOUR PACKAGE]/[YOUR THEME]/template/catalog/product/view/attribute.phtml

Buka file dan cari baris berikut:

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

Ganti seluruh loop foreach dengan baris kode berikut:

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

Sumber: http://codingbasics.net/hide-magento-attributes-value/

Sumber: http://www.magthemes.com/magento-blog/empty-attributes-showing-na-fix/

Michael Yaeger
sumber
4

Saya tidak tahu persis, tetapi saya telah membacanya di suatu tempat.

Sembunyikan atribut kosong dengan hanya mengedit file template bernama "attributes.phtml".

Dalam kode Anda, cari baris berikut:

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

dan ganti baris-baris ini dengan ini:

<?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; ?>
Magento_ocodewire
sumber
1
Solusi Anda hanya menyembunyikan datetime tipe atribut yang merupakan satu-satunya yang memiliki nilai N / A. Bidang teks, area teks, multiselect, dropdown tidak memiliki nilai. Jika tipe attribyte adalah datetime dan nilainya diatur ke Tidak, itu harus ditampilkan alih-alih disembunyikan.
ADDISON74
1

ubah kode berikut dalam aplikasi / desain / antarmuka / basis / default / templat / katalog / produk / tampilan / atribut.phtml :

dari:

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

untuk:

<?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; ?>
Daniel
sumber
2
Jangan ubah templat dasar ...
Jelle Siderius
1

Dalam tema kustom Anda, arahkan ke: catalog\product\view\attributes.phtml. Kode PHP Anda harus memeriksa apakah nilai atributnya "Tidak" atau "N / A" dalam semua bahasa. Ini tidak akan membuat atribut dengan nilai-nilai ini.

Kode akan terlihat seperti ini:

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

Variabel $emptyValuesditambahkan dan centang apakah itu dalam array telah ditambahkan ke kode.

Pastikan untuk mengosongkan cache setelah Anda melakukan perubahan pada frontend.

Jelle Siderius
sumber
tidak bekerja di atas kode untuk saya
Permata
1

Ini dapat dilakukan dengan sepotong kecil kode. Temukan dan buka attributes.phtmlfile. File ini dapat ditemukan di sini:/app/design/frontend/[theme name]/[package name]/template/catalog/product/view/attribute.phtml

Buka file dan cari baris berikut:

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

Ganti seluruh loop foreach dengan baris kode berikut:

<?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; ?>
Teja Bhagavan Kollepara
sumber
0

Masalah dipecahkan :) Solusi ada di sini: http://www.magentocommerce.com/boards%20/viewthread/294064/#t407742

Modul ini berfungsi baik dengan magento 1.8.1 Tidak perlu membeli modul atau mengedit kode apa pun.

Terima kasih Niro (Pengembang modul ini)

Bingkai kunci
sumber
1
Tautan ini rusak Dapatkah saya tahu memperbarui tautan langsung?
Bulan
4
atau bahkan lebih baik: posting jawaban yang benar di sini. Tautan baru akan rusak lagi ...
simonthesorcerer
0

Cara mudah, tetapi tidak perlu lebih baik dari yang lain.

Perbarui file terjemahan Anda Mage_Catalog.csv. Tetapkan nilai kosong seperti di bawah ini.

N/A,""
No,""

Atribut Frontend akan diabaikan ketika No atau N / A.

Rafael Patro
sumber
0

Terkadang kami menemukan toko yang ingin memiliki banyak atribut produk yang berbeda, tetapi mereka hanya menginginkan set atribut default. Ini berarti bahwa setiap produk akan memiliki opsi katakanlah 10+ yang terkadang tidak berlaku untuk produk tertentu. Misalnya sepotong pakaian mungkin memerlukan atribut ukuran, tetapi perabot tidak. Karena toko menggunakan set atribut yang sama untuk setiap produk, atribut ukuran kosong akan muncul seperti ini:

Ini tentu saja sangat membingungkan bagi pelanggan, jadi pilihan yang lebih baik adalah menyembunyikan nilai atribut yang kosong. Ini dapat dilakukan dengan sepotong kecil kode. Temukan dan buka attributes.phtmlfile. File ini dapat ditemukan di sini:app/design/frontend/default/[theme name]/template/catalog/product/view/attribute.phtml

Buka file dan cari baris berikut:

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

Ganti seluruh loop foreach dengan baris kode berikut:

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

Itu dia! Atribut kosong sekarang akan disembunyikan dari halaman produk Anda. Jangan lupa untuk me-refresh cache Anda untuk melihat perubahannya.

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

Alkesh Goswami
sumber
tidak bekerja di atas kode
Permata