Показывать статический баннер или баннер категории на странице продукта.

magento.stackexchange https://magento.stackexchange.com//questions/85842

  •  13-12-2019
  •  | 
  •  

Вопрос

У меня есть следующий код в 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;?>

В настоящее время отображается либо баннер категории, либо статический баннер, если в категории в данный момент нет баннера.Однако если я захожу на страницу продукта напрямую, баннер не отображается.

Может ли кто-нибудь предложить внести изменения в код, чтобы, если пользователь посещает продукт напрямую (т.а не путем посещения категории), то будет отображаться статический баннер («cms_top_banner»).

Это было полезно?

Решение

Проблема в том, что когда вы загружаете страницу продукта напрямую, Mage::registry('current_category') вернется NULL и, следовательно, в вашем коде ничего не будет выполнено, поскольку весь ваш код находится в этой родительской проверке цикла if.

Вы можете использовать приведенный ниже код.

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

Это гарантирует, что, если действующая категория не существует, в любом случае будет показан баннер по умолчанию.

Другие советы

Вы можете попробовать этот код, он покажет статический баннер, если категории нет:

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

Попробуй это

 <?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;?>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top