在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());
}
答案 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();
}