Pergunta

Eu tenho o seguinte código em 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;?>

Atualmente, isso mostra o banner da categoria ou um banner estático se a categoria não tiver um banner no momento.No entanto, se eu visitar a página do produto diretamente, nenhum banner será exibido.

Alguém pode sugerir uma edição no código para que, se um usuário visitar um produto diretamente (ou seja,não visitando uma categoria), então o banner estático ('cms_top_banner') será exibido.

Foi útil?

Solução

O problema aqui é que, quando você carrega a página do produto diretamente, Mage::registry('current_category') retornará NULL e, portanto, nada será executado em seu código, já que todo o seu código reside naquele pai, se for verificado o loop.

Você pode usar o código abaixo.

<?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();
    }
?>

Isso garantirá que, caso não exista uma categoria válida, seu banner padrão seja exibido em qualquer caso.

Outras dicas

Você pode tentar este código, ele mostrará um banner estático se não houver categoria:

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

Experimente isso

 <?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 em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top