1

Just activated Varnish cache on my magento site and started receiving this error (it worked just fine when Varsnish wasn't active):

Fatal error: Call to a member function getImageUrl() on a non-object in /home/admin/public_html/golulo.es/app/design/frontend/golulo/default/template/page/html/page_header.phtml on line 4

Here is the content from page_header.phtml

<?php
    $_helper    = Mage::helper('catalog/output');
    $_category  = Mage::registry('current_category');
    $_imgUrl = $_category->getImageUrl();
?>
<?php
    if (!$_imgUrl){
?>
<script type="text/javascript">
jQuery(function($){
    $(".top-container").addClass("no-image");
});
</script>
<?php
    }
?>
<div class="category-header-container">
    <div class="bgback" style="background:#F7F6F4;">
        <div class="container row" style="<?php if($_imgUrl): ?>background-image: url(<?php echo $_imgUrl; ?>);<?php endif; ?>">
            <div class="table-container">
                <div class="category-top-title">
                    <h1><?php echo $_helper->categoryAttribute($_category, $_category->getName(), 'name') ?></h1>
                </div>
                <div class="left-area breadcrumbs-holder">
                    <?php echo $this->getChildHtml("breadcrumbs"); ?>
                </div>
            </div>
        </div>
    </div>
</div>
<div class="zn_header_bottom_style"></div>

If I remove $_imgUrl for example, I get the same error with getName.

I'm trying to find any working solution, but I can't find anything that would help.

Any ideas? Thanks,

4
  • current_category is exist in registry only if the session has requested for some category page.. Jan 7, 2015 at 10:10
  • when something is not working only if an extension is activated, then most probably extension makes the problem.. Jan 7, 2015 at 10:14
  • I'm trying to contact the developer, I'll update the question when I will have somekind of solution. Thanks.
    – Artur Rain
    Jan 7, 2015 at 10:31
  • forget about excluding it from cache, just try to load it from another layout and template...
    – user2857
    Jan 13, 2015 at 23:15

2 Answers 2

1

Mage::registry('current_category'); returns something only if you are on a category page.
I see that you code is in the header. If you are on other pages than a category page $_category will be null so you cannot call different methods on it.

7
  • Hello, yes you're correct, but this content is only displayed on my category pages, I call it via my local.xml Here's the code: <catalog_category_view> <reference name="top.container"> <block type="core/template" name="page.header" template="page/html/page_header.phtml"> <block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs"/> </block> </reference> </catalog_category_view>
    – Artur Rain
    Jan 7, 2015 at 10:11
  • In this case it should be OK. Maybe there is a problem with your varnish configuration.
    – Marius
    Jan 7, 2015 at 10:13
  • Yes, I think so too, because before I've activated Varnish it worked, but now it gives me this error and I have no clue how to fix it. Any ideas what can be happening? I use Turpentime plugin.
    – Artur Rain
    Jan 7, 2015 at 10:15
  • Maybe you should contact the developer on this
    – Marius
    Jan 7, 2015 at 10:19
  • Ok, I've added a Issue request on Githud, if some interested here's: Github Issue Link
    – Artur Rain
    Jan 7, 2015 at 10:24
1

I've never used Turpentine, but I believe it uses hole punching. If the template in question is hole punched, it's likely unsafe to rely on data in the registry, since it might get rendered without the original action getting processed, and therefore there won't be anything in the registry.

Update: As I say I'm not familiar with how exactly hole-punching works with turpentine, but you could probably try manually loading the category if it isn't in the registry.

$_category  = Mage::registry('current_category');
if ( ! $_category) {
    $categoryId = Mage::app()->getRequest()->getParam('id', false);
    $_category = Mage::getModel('catalog/category')
        ->setStoreId(Mage::app()->getStore()->getId())
        ->load($categoryId);
}
4
  • Is there any workarround?
    – Artur Rain
    Jan 7, 2015 at 10:39
  • I've added an example to my answer. Jan 7, 2015 at 11:05
  • ok, this made the Error disapear, but still it doesn't retrieve the category name nor breadcrumbs, any ideas? Thank you very much for the help.
    – Artur Rain
    Jan 7, 2015 at 11:39
  • what extension would you recommend to use? I see that turpentime, gives me a check of a lot problems... Add to cart doesn't work, can't login, all the issues described here etc.
    – Artur Rain
    Jan 7, 2015 at 12:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.