Come nascondere un attributo vuoto in qualsiasi modello di magento?


12

Voglio nascondere l'attributo personalizzato nel modello magento. La mia versione di magento è la 1.8.1

Abbiamo aggiunto attributi personalizzati per il nostro prodotto come marchio, dimensione, tipo di prodotto ecc. Ma a volte non abbiamo aggiunto valori in questi attributi. magento mostra No o N / A nella pagina di visualizzazione del prodotto.

Quindi, vogliamo nascondere gli attributi che sono vuoti o nessun valore nel modello.


Avremo bisogno di molte più informazioni per aiutare (quale attributo? Dove?)
benmarks

Risposte:


7

Una soluzione rapida:

In app/[mypackage]/[mytheme]/template/catalog/product/view/attributes.phtml(o copia questo file nel tuo tema dalla base o dal tema personalizzato predefinito):

<?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 seguito non è necessario per ottenere ciò che hai chiesto:

Tali attributi sono ancora caricati. Per ottimizzare questo (se hai un gran numero di attributi nei set di attributi) fai:

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

Nota i due // Fix:commenti.

Questa funzione modificata proviene da Mage_Catalog_Block_Product_View_Attributes. Devi copiare la funzione sopra nella tua classe di blocco dal tuo modulo. La classe di blocco riscrive la classe di blocco principale. Applicare questo migliorerà notevolmente il caricamento della pagina di visualizzazione del prodotto sul frontend.

Se non sai come creare un modulo personalizzato nella directory locale, cerca un tutorial su come creare un modulo Magento e come riscrivere una classe di blocchi core. Oppure prova http://www.magentocommerce.com/magento-connect/ultimate-module-creator.html .


La prima soluzione che modifica il file modello va bene, ma ci sono due problemi. Innanzitutto se esiste un tipo di attributo Sì / No con un valore impostato su No, verrà nascosto nel frontend che non è OK. Secondo se non ci sono attributi otterrai l'intestazione Informazioni aggiuntive che non è OK. Se non ci sono attributi, l'intestazione non dovrebbe apparire.
ADDISON74

6

Trova e apri il file stats.phtml . Questo file può essere trovato qui: /app/design/frontend/[YOUR PACKAGE]/[YOUR THEME]/template/catalog/product/view/attribute.phtml

Apri il file e cerca le seguenti righe:

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

Sostituisci l'intero ciclo foreach con le seguenti righe di codice:

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

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

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


4

Non so esattamente, ma l'ho letto da qualche parte.

Nascondi gli attributi vuoti semplicemente modificando il file modello denominato "stats.phtml".

Nel tuo codice, trova le seguenti righe:

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

e sostituisci queste linee con queste:

<?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
La tua soluzione nasconde solo il tipo di attributo datetime che è l'unico con valore N / A. Un campo di testo, area di testo, selezione multipla, menu a discesa non ha alcun valore. Se il tipo di attributo è datetime e il valore è impostato su No, dovrebbe essere visualizzato invece di hidding.
ADDISON74

1

cambia il seguente codice in app / design / frontend / base / default / template / catalog / product / view / stats.phtml :

a partire dal:

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

per:

<?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
Non modificare i modelli di base ...
Jelle Siderius,

1

Nel vostro tema personalizzato, passare a: catalog\product\view\attributes.phtml. Il tuo codice PHP dovrebbe verificare se il valore dell'attributo è "No" o "N / A" in tutte le lingue. Ciò non renderà gli attributi con questi valori.

Il codice sarà simile al seguente:

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

La variabile $emptyValuesviene aggiunta e il controllo se è nell'array è stato aggiunto al codice.

Assicurati di svuotare la cache dopo aver apportato modifiche al frontend.


non funziona sopra il codice per me
Gemma

1

Questo può essere fatto con un piccolo codice. Trova e apri il attributes.phtmlfile. Questo file può essere trovato qui:/app/design/frontend/[theme name]/[package name]/template/catalog/product/view/attribute.phtml

Apri il file e cerca le seguenti righe:

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

Sostituisci l'intero ciclo foreach con le seguenti righe di codice:

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

Problema risolto :) La soluzione è qui: http://www.magentocommerce.com/boards%20/viewthread/294064/#t407742

Questo modulo funziona bene con Magento 1.8.1 Non è necessario acquistare il modulo o modificare alcun codice.

Grazie Niro (sviluppatore di questo modulo)


1
Il collegamento è interrotto Posso sapere se aggiorna il collegamento live?
Luna,

4
o meglio: pubblica qui la risposta corretta. Un nuovo collegamento verrà nuovamente interrotto ...
simonthesorcerer

0

Modo semplice, ma non necessario meglio di altri.

Aggiorna il tuo file di traduzione Mage_Catalog.csv. Imposta valori vuoti come di seguito.

N/A,""
No,""

Gli attributi del frontend verranno ignorati quando No o N / A.


0

A volte ci imbattiamo in un negozio che vuole avere molti attributi di prodotto diversi, ma vogliono solo il set di attributi predefinito. Ciò significa che ogni prodotto avrà diciamo oltre 10 opzioni che a volte non si applicano a determinati prodotti. Ad esempio, un capo di abbigliamento potrebbe aver bisogno di un attributo di dimensioni, ma un mobile no. Poiché il negozio utilizza gli stessi set di attributi per ogni prodotto, l'attributo dimensione vuota verrà visualizzato in questo modo:

Questo è ovviamente molto confuso per i clienti, quindi l'opzione migliore sarebbe quella di nascondere i valori degli attributi che sono vuoti. Questo può essere fatto con un piccolo codice. Trova e apri il attributes.phtmlfile. Questo file può essere trovato qui:app/design/frontend/default/[theme name]/template/catalog/product/view/attribute.phtml

Apri il file e cerca le seguenti righe:

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

Sostituisci l'intero ciclo foreach con le seguenti righe di codice:

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

Questo è tutto! Gli attributi vuoti ora saranno nascosti dalle pagine dei tuoi prodotti. Non dimenticare di aggiornare la cache per vedere le modifiche.

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


non funziona sopra il codice
Gemma
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.