Magento 1.9 – Add Category Banner to Product View Page

magento-1.9product-view

Is there anyway I can add the category banner to the product view page. I tried adding the following code (taken from category/view.phtml) to product/view.phtml but it resulted in a 'fatal call error' can anyone help?

                        <?php $_product = $this->getProduct(); ?>
        <?php
                $_helper    = $this->helper('catalog/output');
                $_category  = $this->getCurrentCategory();
                $_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): ?>
                <?php echo $_imgHtml ?>
            <?php endif; ?>
        <script type="text/javascript">
            var optionsPrice = new Product.OptionsPrice(<?php echo $this->getJsonConfig() ?>);
        </script>
        <div id="messages_product_view"><?php echo $this->getMessagesBlock()->toHtml() ?></div>
        <div class="product-view">
            <div class="product-essential">
                <form action="<?php echo $this->getSubmitUrl($_product, array('_secure' => $this->_isSecure())) ?>" method="post" id="product_addtocart_form"<?php if($_product->getOptions()): ?> enctype="multipart/form-data"<?php endif; ?>>
                    <?php echo $this->getBlockHtml('formkey') ?>
                    <div class="no-display">
                        <input type="hidden" name="product" value="<?php echo $_product->getId() ?>" />
                        <input type="hidden" name="related_product" id="related-products-field" value="" />
                    </div>

                    <div class="product-img-box">
                        <div class="product-name">
                            <h1><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></h1>
                        </div>
                        <?php echo $this->getChildHtml('media') ?>
                    </div>

                    <div class="product-shop">
                        <div class="product-name">
                            <span class="h1"><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></span>
                        </div>


                        <div class="extra-info">
                            <?php echo $this->getReviewsSummaryHtml($_product, 'default', false)?>
                            <?php /* echo $this->getChildHtml('product_type_availability'); */ ?>
                        </div>

                        <?php echo $this->getChildHtml('alert_urls') ?>

                        <?php if ($_product->getShortDescription()):?>
                            <div class="short-description">
                                <div class="std"><?php echo $_helper->productAttribute($_product, nl2br($_product->getShortDescription()), 'short_description') ?></div>
                            </div>
                        <?php endif;?>

                        <div class="price-info">
                            <?php echo $this->getPriceHtml($_product); ?>
                            <?php echo $this->getChildHtml('bundle_prices') ?>
                            <?php echo $this->getTierPriceHtml() ?>
                        </div>

                        <div class="add-to-cart-wrapper">
                        <?php echo $this->getChildHtml('product_type_data') ?>
                        <?php echo $this->getChildHtml('extrahint') ?>

                        <?php if (!$this->hasOptions()):?>
                            <div class="add-to-box">
                                <?php if($_product->isSaleable()): ?>
                                    <?php echo $this->getChildHtml('addtocart') ?>
                                    <?php if( $this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?>
                                        <span class="or"><?php echo $this->__('OR') ?></span>
                                    <?php endif; ?>
                                <?php endif; ?>
                                <?php /* echo $this->getChildHtml('addto') ?>
                                <?php echo $this->getChildHtml('sharing') */?>
                            </div>
                            <?php echo $this->getChildHtml('extra_buttons') ?>
                        <?php elseif (!$_product->isSaleable()): ?>
                            <!--<div class="add-to-box">
                                <?php echo $this->getChildHtml('addto') ?>
                                <?php echo $this->getChildHtml('sharing') ?>
                            </div>-->
                        <?php endif; ?>
                    </div>

                        <?php echo $this->getChildHtml('other');?>

                        <?php if ($_product->isSaleable() && $this->hasOptions()):?>
                            <?php echo $this->getChildChildHtml('container1', '', true, true) ?>
                        <?php endif;?>

                    </div>

                    <?php echo $this->getChildHtml('related_products') ?>

                    <div class="clearer"></div>
                    <?php if ($_product->isSaleable() && $this->hasOptions()):?>
                        <?php echo $this->getChildChildHtml('container2', '', true, true) ?>
                    <?php endif;?>
                </form>
                <script type="text/javascript">
                //<![CDATA[
                    var productAddToCartForm = new VarienForm('product_addtocart_form');
                    productAddToCartForm.submit = function(button, url) {
                        if (this.validator.validate()) {
                            var form = this.form;
                            var oldUrl = form.action;

                            if (url) {
                               form.action = url;
                            }
                            var e = null;
                            try {
                                this.form.submit();
                            } catch (e) {
                            }
                            this.form.action = oldUrl;
                            if (e) {
                                throw e;
                            }

                            if (button && button != 'undefined') {
                                button.disabled = true;
                            }
                        }
                    }.bind(productAddToCartForm);

                    productAddToCartForm.submitLight = function(button, url){
                        if(this.validator) {
                            var nv = Validation.methods;
                            delete Validation.methods['required-entry'];
                            delete Validation.methods['validate-one-required'];
                            delete Validation.methods['validate-one-required-by-name'];
                            // Remove custom datetime validators
                            for (var methodName in Validation.methods) {
                                if (methodName.match(/^validate-datetime-.*/i)) {
                                    delete Validation.methods[methodName];
                                }
                            }

                            if (this.validator.validate()) {
                                if (url) {
                                    this.form.action = url;
                                }
                                this.form.submit();
                            }
                            Object.extend(Validation.methods, nv);
                        }
                    }.bind(productAddToCartForm);
                //]]>
                </script>
            </div>

            <div class="product-collateral toggle-content tabs">
                <?php if ($detailedInfoGroup = $this->getChildGroup('detailed_info', 'getChildHtml')):?>
                    <dl id="collateral-tabs" class="collateral-tabs">
                        <?php foreach ($detailedInfoGroup as $alias => $html):?>
                            <dt class="tab"><span><?php echo $this->escapeHtml($this->getChildData($alias, 'title')) ?></span></dt>
                            <dd class="tab-container">
                                <div class="tab-content"><?php echo $html ?></div>
                            </dd>
                        <?php endforeach;?>
                    </dl>
                <?php endif; ?>
            </div>

            <?php echo $this->getChildHtml('upsell_products') ?>
            <?php echo $this->getChildHtml('product_additional_data') ?>

        </div>

Best Answer

You can not fulfill your requirement easily

There have few conditions for showing the category images at product view

If current product url is contain category path.Then from registry variable Mage::registry('current_category').You can get category object easily.Then you get category banner

<?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): ?>
    <?php echo $_imgHtml ?>
    <?php endif; ?>

<?php endif; ?>   

If this registry variable does not give result then you need to get category id's from product (getCategory()).

Then using category model,you can get that particulate product categories banner images.

<?php
$ids = $_product->getCategoryIds();
if(!empty($ids)){
    foreach($ids as $eachCatid):
    $_category= Mage::getModel('catalog/category')->setStoreId(Mage::app()->getStore()->getId())->load(eachCatid);
$_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): ?>
    <?php echo $_imgHtml ?>
    <?php endif; ?>
<?php
    endforeach;
 } ?>

Add <?php $_product = $this->getProduct(); ?>code at top of product/view.phtml

Related Topic