¿Cómo ocultar el atributo vacío en cualquier plantilla de magento?


12

Quiero ocultar el atributo personalizado en la plantilla de magento. Mi versión magento es 1.8.1

Hemos agregado atributos personalizados para nuestro producto, como marca, dimensión, tipo de producto, etc., pero a veces no agregamos valores en estos atributos. magento muestra No o N / A en la página de vista del producto.

Por lo tanto, queremos ocultar los atributos que están vacíos o sin valor en la plantilla.


Necesitaremos mucha más información para ayudar (¿qué atributo? ¿Dónde?)
puntos de referencia

Respuestas:


7

Una solución rápida:

En app/[mypackage]/[mytheme]/template/catalog/product/view/attributes.phtml(o copie este archivo en su tema desde el tema personalizado base o predeterminado):

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

A continuación no es necesario para lograr lo que ha pedido:

Esos atributos aún están cargados. Para optimizar esto (si tiene una gran cantidad de atributos en conjuntos de atributos), haga lo siguiente:

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

Tenga en cuenta los dos // Fix:comentarios.

Esta función modificada es de Mage_Catalog_Block_Product_View_Attributes. Debe copiar la función anterior en su clase de bloque desde su módulo. Su clase de bloque reescribe la clase de bloque central. Aplicar esto mejorará considerablemente la carga de la página de vista del producto en la interfaz.

Si no sabe cómo crear un módulo personalizado en el directorio local, busque un tutorial sobre cómo crear un módulo Magento y cómo reescribir una clase de bloque central. O prueba http://www.magentocommerce.com/magento-connect/ultimate-module-creator.html .


La primera solución para cambiar el archivo de plantilla está bien, pero hay dos problemas. Primero, si hay un tipo de atributo Sí / No con un valor establecido en No, se ocultará en la interfaz que no está bien. En segundo lugar, si no hay atributos, obtendrá el encabezado Información adicional que no está bien. Si no hay atributos, ese encabezado no debería aparecer.
ADDISON74

6

Busque y abra el archivo atributos.phtml . Este archivo se puede encontrar aquí: /app/design/frontend/[YOUR PACKAGE]/[YOUR THEME]/template/catalog/product/view/attribute.phtml

Abra el archivo y busque las siguientes líneas:

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

Reemplace todo el bucle foreach con las siguientes líneas de código:

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

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

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


4

No sé exactamente, pero lo he leído en alguna parte.

Oculte los atributos vacíos simplemente edite el archivo de plantilla denominado "atributos.phtml".

En su código, encuentre las siguientes líneas:

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

y reemplace estas líneas con estas:

<?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
Su solución solo oculta el tipo de atributo datetime, que es el único que tiene un valor N / A. Un campo de texto, área de texto, multiselección, desplegable no tiene valor. Si el tipo de atributo es datetime y el valor se establece en No, debe mostrarse en lugar de ocultarse.
ADDISON74

1

cambie el siguiente código en app / design / frontend / base / default / template / catalog / product / view / atributos.phtml :

desde:

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

a:

<?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
No cambie las plantillas base ...
Jelle Siderius

1

En el tema personalizado, vaya a: catalog\product\view\attributes.phtml. Su código PHP debe verificar si el valor del atributo es "No" o "N / A" en todos los idiomas. Esto no representará los atributos con estos valores.

El código se verá así:

<?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 variable $emptyValuesse agrega y la verificación si está en la matriz se ha agregado al código.

Asegúrese de vaciar la memoria caché después de haber realizado cambios en la interfaz.


no funciona el código anterior para mí
Gema

1

Esto se puede hacer con un pequeño código. Encuentra y abre el attributes.phtmlarchivo. Este archivo se puede encontrar aquí:/app/design/frontend/[theme name]/[package name]/template/catalog/product/view/attribute.phtml

Abra el archivo y busque las siguientes líneas:

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

Reemplace todo el bucle foreach con las siguientes líneas de código:

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

De manera fácil, pero no necesariamente mejor que otros.

Actualiza tu archivo de traducción Mage_Catalog.csv. Establecer valores vacíos como a continuación.

N/A,""
No,""

Los atributos frontend serán ignorados cuando No o N / A.


0

A veces nos encontramos con una tienda que quiere tener muchos atributos de producto diferentes, pero solo quieren el conjunto de atributos predeterminado. Esto significa que cada producto tendrá más de 10 opciones que a veces no se aplican a ciertos productos. Por ejemplo, una prenda de vestir puede necesitar un atributo de tamaño, pero un mueble no. Debido a que la tienda usa los mismos conjuntos de atributos para cada producto, el atributo de tamaño vacío se mostrará así:

Por supuesto, esto es muy confuso para los clientes, por lo que la mejor opción sería ocultar los valores de los atributos que están vacíos. Esto se puede hacer con un pequeño código. Encuentra y abre el attributes.phtmlarchivo. Este archivo se puede encontrar aquí:app/design/frontend/default/[theme name]/template/catalog/product/view/attribute.phtml

Abra el archivo y busque las siguientes líneas:

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

Reemplace todo el bucle foreach con las siguientes líneas de código:

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

¡Eso es! Los atributos vacíos ahora estarán ocultos de sus páginas de productos. No olvides actualizar tu caché para ver los cambios.

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


no funciona por encima del código
Gema
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.