Pregunta

Tengo el siguiente código en product/view.phtml:

<?php 
    if(Mage::registry('current_category')):
    $_category=Mage::registry('current_category');
    $_helper    = Mage::helper('catalog/output');
        $_imgHtml   = '';
        if ($_imgUrl = $_category->getImageUrl()) {
            $_imgHtml = '<p class="category-image"><img src="'.$_imgUrl.'"     alt="'.$this->escapeHtml($_category->getName()).'" title="'.$this->escapeHtml($_category->getName()).'" /></p>';
            $_imgHtml = $_helper->categoryAttribute($_category, $_imgHtml, 'image');
        }?>

    <?php if($_imgUrl) { ?>
    <!-- Category has Image uploaded -->
    <?php echo $_imgHtml ?>
    <?php }else{ ?>
    <!-- Category has NO Image uploaded, show static block -->
    <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('cms_top_banner')->toHtml(); ?>
<?php }?>
<?php endif;?>

Actualmente, esto muestra el banner de categoría o un banner estático si la categoría no tiene actualmente un banner.Sin embargo, si visito la página del producto directamente, no se muestra ningún banner.

¿Alguien puede sugerir una edición del código para que, si un usuario visita un producto directamente (es decir,no visitando una categoría), se mostrará el banner estático ('cms_top_banner').

¿Fue útil?

Solución

El problema aquí es que, cuando cargas la página de tu producto directamente, Mage::registry('current_category') regresará NULL y por lo tanto no se ejecutará nada en su código, ya que todo su código reside en esa verificación de bucle principal if.

Puede utilizar el siguiente código.

<?php
    $_imgHtml = '';
    $_imgUrl  = false;

    //check whether a valid category exist
    if(Mage::registry('current_category')) {

        //grabing category banner if any
        $_category=Mage::registry('current_category');
        $_helper    = Mage::helper('catalog/output');
        if ($_imgUrl = $_category->getImageUrl()) {

            //prepare banner html
            $_imgHtml = '<p class="category-image"><img src="'.$_imgUrl.'"     alt="'.$this->escapeHtml($_category->getName()).'" title="'.$this->escapeHtml($_category->getName()).'" /></p>';
            $_imgHtml = $_helper->categoryAttribute($_category, $_imgHtml, 'image');
        }
    }

    //check a valid image url exist
    if ($_imgUrl) {
            echo $_imgHtml;
    } else {
        echo $this->getLayout()->createBlock('cms/block')
            ->setBlockId('cms_top_banner')
            ->toHtml();
    }
?>

Esto asegurará que, si no existe una categoría válida, se mostrará su banner predeterminado en cualquier caso.

Otros consejos

Puede probar este código, mostrará banner estático si no hay categoría:

<?php
    if(Mage::registry('current_category')):
        $_category=Mage::registry('current_category');
        $_helper    = Mage::helper('catalog/output');
        $_imgHtml   = '';
        if ($_imgUrl = $_category->getImageUrl()) {
            $_imgHtml = '<p class="category-image"><img src="'.$_imgUrl.'"     alt="'.$this->escapeHtml($_category->getName()).'" title="'.$this->escapeHtml($_category->getName()).'" /></p>';
            $_imgHtml = $_helper->categoryAttribute($_category, $_imgHtml, 'image');
        }
?>
        <?php if($_imgUrl) { ?>
            <!-- Category has Image uploaded -->
            <?php echo $_imgHtml ?>
        <?php }else{ ?>
            <!-- Category has NO Image uploaded, show static block -->
            <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('cms_top_banner')->toHtml(); ?>
        <?php }?>
<?php else: ?>
        <!-- No category available, show static block -->
        <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('cms_top_banner')->toHtml(); ?>
<?php endif; ?>

Pruebe esto

 <?php if(Mage::registry('current_category')):
        $_category=Mage::registry('current_category');
        $_helper    = Mage::helper('catalog/output');
        $_imgHtml   = '';
        if ($_imgUrl = $_category->getImageUrl()) :
            $_imgHtml = '<p class="category-image"><img src="'.$_imgUrl.'"     alt="'.$this->escapeHtml($_category->getName()).'" title="'.$this->escapeHtml($_category->getName()).'" /></p>';
            $_imgHtml = $_helper->categoryAttribute($_category, $_imgHtml, 'image');
        endif;?>
      <?php if($_imgUrl) : ?>
        <?php echo $_imgHtml ?>
      <?php else: ?>
        <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('cms_top_banner')->toHtml(); ?>
      <?php endif;?>
<?php else:?>
    <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('cms_top_banner')->toHtml(); ?> 
<?php endif;?>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top