页面失败,调用非对象错误的成员函数getMetaTitle()

时间:2015-09-15 16:06:20

标签: php magento

在magento上,我的产品页面显示为白色屏幕。打印的错误是Fatal error: Call to a member function getMetaTitle() on a non-object in /app/code/core/Mage/Catalog/Block/Category/View.php on line 44

以下是第42-46行:

    if ($headBlock = $this->getLayout()->getBlock('head')) {
        $category = $this->getCurrentCategory();
        if ($title = $category->getMetaTitle()) {
            $headBlock->setTitle($title);
        }

不知道如何解决这个问题,因为代码看起来很好。

更新的代码:

  if ($headBlock = $this->getLayout()->getBlock('head')) {
        $cat_id = $this->getCurrentCategory()->getId();
        $category = Mage::getModel('catalog/category')->load($cat_id);            
        if ($title = $category->getMetaTitle()) {
            $headBlock->setTitle($title);
        }
        if ($description = $category->getMetaDescription()) {
            $headBlock->setDescription($description);
        }
        if ($keywords = $category->getMetaKeywords()) {
            $headBlock->setKeywords($keywords);
        }
        if ($this->helper('catalog/category')->canUseCanonicalTag()) {
            $headBlock->addLinkRel('canonical', $category->getUrl());
        }

3 个答案:

答案 0 :(得分:1)

也许您修改了导致错误的原始代码。恢复原始代码。

    <?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category   Mage
* @package    Mage_Catalog
* @copyright  Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
* @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*/

/**
* Category View block
*
* @category   Mage
* @package    Mage_Catalog
* @author      Magento Core Team <core@magentocommerce.com>
*/
class Mage_Catalog_Block_Category_View extends Mage_Core_Block_Template
{
protected function _prepareLayout()
{
         parent::_prepareLayout();

         $this->getLayout()->createBlock('catalog/breadcrumbs');

         if ($headBlock = $this->getLayout()->getBlock('head')) {
             if ($title = $this->getCurrentCategory()->getMetaTitle()) {
                 $headBlock->setTitle($title);
             }
             if ($description = $this->getCurrentCategory()->getMetaDescription()) {
                 $headBlock->setDescription($description);
             }
             if ($keywords = $this->getCurrentCategory()->getMetaKeywords()) {
                 $headBlock->setKeywords($keywords);
             }
             /*
             want to show rss feed in the url
             */
             if ($this->IsRssCatalogEnable() && $this->IsTopCategory()) {
                 $title = $this->helper('rss')->__('%s RSS Feed',$this->getCurrentCategory()->getName());
                 $headBlock->addItem('rss', $this->getRssLink(), 'title="'.$title.'"');
             }
         }

         return $this;
     }

     public function IsRssCatalogEnable()
     {
         return Mage::getStoreConfig('rss/catalog/category');
     }

     public function IsTopCategory()
     {
         return $this->getCurrentCategory()->getLevel()==2;
     }

     public function getRssLink()
     {
         return Mage::getUrl('rss/catalog/category',array('cid' => $this->getCurrentCategory()->getId(), 'store_id' => Mage::app()->getStore()->getId()));
     }

     public function getProductListHtml()
     {
         return $this->getChildHtml('product_list');
     }

     /**
      * Retrieve current category model object
      *
      * @return Mage_Catalog_Model_Category
      */
     public function getCurrentCategory()
     {
         if (!$this->hasData('current_category')) {
             $this->setData('current_category', Mage::registry('current_category'));
         }
         return $this->getData('current_category');
     }

     public function getCmsBlockHtml()
     {
         if (!$this->getData('cms_block_html')) {
             $html = $this->getLayout()->createBlock('cms/block')
                 ->setBlockId($this->getCurrentCategory()->getLandingPage())
                 ->toHtml();
             $this->setData('cms_block_html', $html);
         }
         return $this->getData('cms_block_html');
     }

     public function isProductMode()
     {
         return $this->getCurrentCategory()->getDisplayMode()==Mage_Catalog_Model_Category::DM_PRODUCT;
     }

     public function isMixedMode()
     {
         return $this->getCurrentCategory()->getDisplayMode()==Mage_Catalog_Model_Category::DM_MIXED;
     }

     public function isContentMode()
     {
         return $this->getCurrentCategory()->getDisplayMode()==Mage_Catalog_Model_Category::DM_PAGE;
     }
 }

答案 1 :(得分:0)

您需要做的是load类别,如下所示:

$cat_id = $this->getCurrentCategory()->getId();
$category = Mage::getModel('catalog/category')->load($cat_id);

然后你应该可以使用$category->getMetaTitle();

答案 2 :(得分:0)

你有没有尝试过?

if(is_object(Mage::registry('current_category')))
{
  echo Mage::registry('current_category')->getName();
  echo Mage::registry('current_category')->getMetaTitle();
}