Показывать статический баннер или баннер категории на странице продукта.
-
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;?>