Herhangi bir magento şablonunda boş özniteliği nasıl gizleyebilirim?


12

Magento şablonundaki özel özelliği gizlemek istiyorum. Benim magento versiyonum 1.8.1

Ürünümüz için marka, boyut, ürün türü vb.Gibi özel özellikler ekledik, ancak bazen bu özelliklere değer eklemedik. magento ürün görünümü sayfasında Hayır veya Yok gösterir.

Bu nedenle, şablonda boş olan veya değeri olmayan özellikleri gizlemek istiyoruz.


Yardım etmek için çok daha fazla bilgiye ihtiyacımız olacak (hangi özellik? Nerede?)
benmarks

Yanıtlar:


7

Hızlı bir düzeltme:

İçinde app/[mypackage]/[mytheme]/template/catalog/product/view/attributes.phtml(veya temanızdaki bu dosyayı temel veya varsayılan özel temadan kopyalayın):

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

Sorduğunuza ulaşmak için aşağıda gerekli değildir:

Bu özellikler hala yüklü. Bunu optimize etmek için (özellik kümelerinde çok sayıda özelliğiniz varsa) şunları yapın:

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

Not İki // Fix:yorumlarınıza.

Bu modifiye edilmiş işlevi, bir Mage_Catalog_Block_Product_View_Attributes. Yukarıdaki işlevi blok sınıfınızda modülünüzden kopyalamanız gerekir. Blok sınıfınız çekirdek blok sınıfını yeniden yazar. Bunu uygulamak, ön uçtaki ürün görünümü sayfası yükünü önemli ölçüde artıracaktır.

Yerel direkte özel bir modülün nasıl oluşturulacağını bilmiyorsanız, bir Magento modülünün nasıl oluşturulacağı ve bir çekirdek blok sınıfının nasıl yeniden yazılacağı hakkında bir eğitimde arama yapın. Veya http://www.magentocommerce.com/magento-connect/ultimate-module-creator.html adresini deneyin .


Şablon dosyasını değiştirmenin ilk çözümü iyi, ancak iki sorun var. İlk olarak, Evet / Hayır şeklinde bir değer Hayır olarak ayarlanmış bir öznitelik türü varsa, ön uçta Tamam olmayan gizli olarak gizlenir. İkincisi, hiçbir öznitelik yoksa, Tamam olmayan başlık Ek Bilgi alırsınız. Hiçbir öznitelik yoksa, bu başlık görünmemelidir.
ADDISON74

6

Attributes.phtml dosyasını bulun ve açın . Bu dosyayı burada bulabilirsiniz: /app/design/frontend/[YOUR PACKAGE]/[YOUR THEME]/template/catalog/product/view/attribute.phtml

Dosyayı açın ve aşağıdaki satırları arayın:

<?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 döngüsünün tamamını aşağıdaki kod satırlarıyla değiştirin:

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

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

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


4

Tam bilmiyorum, ama bir yerde okudum.

“Attributes.phtml” olarak adlandırılan şablon dosyasını düzenleyerek boş özellikleri gizleyin.

Kodunuzda aşağıdaki satırları bulun:

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

ve bu satırları bunlarla değiştirin :

<?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
Çözümünüz yalnızca N / A değerine sahip tek tür olan tarih saatini gizler. Bir metin alanı, metin alanı, çoktan seçmeli, açılır listenin değeri yoktur. Attribyte türü datetime ise ve değer Hayır olarak ayarlanmışsa, hidding yerine gösterilmelidir.
ADDISON74

1

app / design / frontend / base / default / template / catalog / product / view / attributes.phtml dosyasında aşağıdaki kodu değiştirin :

dan:

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

için:

<?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
Temel şablonları değiştirmeyin ...
Jelle Siderius

1

Özel tema olarak, gidin: catalog\product\view\attributes.phtml. PHP kodunuz, öznitelik değerinin tüm dillerde "Hayır" veya "Yok" olup olmadığını kontrol etmelidir. Bu, bu değerlerle öznitelikleri oluşturmaz.

Kod şöyle görünecektir:

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

Değişken $emptyValueseklenir ve dizide olup olmadığını kontrol etmek koda eklenir.

Ön uçta değişiklikler yaptıktan sonra önbelleği boşalttığınızdan emin olun.


benim için kod üzerinde çalışmıyor
Gem

1

Bu küçük bir kod parçası ile yapılabilir. attributes.phtmlDosyayı bulun ve açın . Bu dosyayı burada bulabilirsiniz:/app/design/frontend/[theme name]/[package name]/template/catalog/product/view/attribute.phtml

Dosyayı açın ve aşağıdaki satırları arayın:

<?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 döngüsünün tamamını aşağıdaki kod satırlarıyla değiştirin:

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

Kolay yol, ancak diğerlerinden daha iyi gerekli değildir.

Çeviri dosyanızı güncelleyin Mage_Catalog.csv. Boş değerleri aşağıdaki gibi ayarlayın.

N/A,""
No,""

Hayır veya Yok olduğunda ön uç özellikleri yok sayılır.


0

Bazen birçok farklı ürün özelliğine sahip olmak isteyen bir mağazaya rastlamaktayız, ancak yalnızca varsayılan özellik kümesini istiyorlar. Bu, her ürünün bazen belirli ürünler için geçerli olmayan 10'dan fazla seçeneğe sahip olacağı anlamına gelir. Örneğin, bir giysinin beden niteliğine ihtiyacı olabilir, ancak bir mobilyaya ihtiyaç duymaz. Mağaza, her ürün için aynı öznitelik kümelerini kullandığından, boş boyut özniteliği şu şekilde görünecektir:

Bu, müşteriler için çok kafa karıştırıcıdır, bu nedenle daha iyi bir seçenek boş olan öznitelik değerlerini gizlemek olacaktır. Bu küçük bir kod parçası ile yapılabilir. attributes.phtmlDosyayı bulun ve açın . Bu dosyayı burada bulabilirsiniz:app/design/frontend/default/[theme name]/template/catalog/product/view/attribute.phtml

Dosyayı açın ve aşağıdaki satırları arayın:

<?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 döngüsünün tamamını aşağıdaki kod satırlarıyla değiştirin:

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

Bu kadar! Boş özellikler artık ürün sayfalarınızdan gizlenecek. Değişiklikleri görmek için önbelleğinizi yenilemeyi unutmayın.

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


kod üzerinde çalışmıyor
Gem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.