Magento-致命错误:在第816行的app/code/core/Mage/Eav/Model/Entity/Abstract.php中的非对象上调用成员函数getBackend() [英] Magento - Fatal error: Call to a member function getBackend() on a non-object in app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 816
问题描述
尝试在自定义主题中使用自定义过滤器时出现此错误.
Getting this error when trying to use a custom filter inside a custom theme.
我已经在属性集中设置了新属性"is_featured".我制作了一个产品,将其指定为特色产品(是/否选择)
I have set up the new attribute "is_featured" and its in an attribute set. I made a product that assigned it as featured (yes/no choice)
我的主页(在CMS部分中)包括以下面板"
My home page (in the CMS section) is including the following "panel"
<block type="catalog/product" name="catalog.product_featured_list" template="catalog/product/featured_list.phtml" after="-"/>
featured_list.phtml看起来像这样:
featured_list.phtml looks like this:
<?php
$storeId = Mage::app()->getStore()->getId();
$_productCollection=Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect(array('name', 'url', 'small_image', 'price', 'short_description'))
->addAttributeToFilter('is_featured', 1)
->addAttributeToFilter('status', 1)
->setPageSize(3)
->setStoreId($storeId)
->addStoreFilter($storeId);
$_helper = $this->helper('catalog/output');
?>
<?php if($_productCollection->count()): ?>
<section class="content-box clearfix">
<header>
<h2>Featured products</h2>
</header>
<ul class="featured-products">
<?php foreach ($_productCollection as $_product): ?>
<?php $_productNameStripped = $this->stripTags($_product->getName(), null, true); ?>
<li>
<h3>
<a href="<?php echo $_product->getProductUrl(); ?>" title="<?php echo $_productNameStripped; ?>">
<?php echo $_helper->productAttribute($_product, $_product->getName() , 'name'); ?>
</a>
</h3>
<a href="<?php echo $_product->getProductUrl(); ?>" title="<?php echo $_productNameStripped; ?>">
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(212); ?>" width="200" height="200" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />
</a>
<div>
<ul class="clearfix">
<li>From £<?php echo number_format($_product->price, 2) ?></li>
<li>
<?php
$desct = nl2br($this->htmlEscape($_product->getShortDescription()));
$desct = strip_tags($_product->getShortDescription());
?>
<p>
<?
echo Mage::helper('core/string')->truncate($desct, '100');
?>
<a href="<?php echo $_product->getProductUrl(); ?>" title="<?php echo $_productNameStripped; ?>">
<?php echo $this->__('more details'); ?>
</a>
</p>
</li>
<li>
<form action="<?php echo $this->helper('checkout/cart')->getAddUrl($_product); //echo $this->getAddToCartUrl($_product); ?>" class="product-list-add-to-cart" method="get" id="product_addtocart_form_<?php echo $_product->getId()?>"<?php if($_product->getOptions()): ?> enctype="multipart/form-data"<?php endif; ?>>
<?php if(!$_product->isGrouped()): ?>
<label for="qty"><?php echo $this->__('Qty') ?>:</label>
<input type="text" class="input-text qty" name="qty" id="qty" maxlength="12" value="<?php echo ($this->getMinimalQty($_product)?$this->getMinimalQty($_product):1) ?>" />
<input type="hidden" name="product" value="<?php echo $_product->getId()?>" />
<?php endif; ?>
<button type="button" class="button" onclick="this.form.submit()"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>
</form>
</li>
</ul>
</div>
</li>
<?php endforeach; ?>
</ul>
</section>
<?php endif; ?>
似乎问题出在块开始处的集合中. (我可以从主页上删除此面板,并且网站可以正常加载)
It seems like the issue is with the collection at the start of the block. (I can remove this panel form the home page, and the site loads fine)
我很确定我拥有上述所有可用属性(is_featured似乎是唯一的自定义属性)
I'm pretty sure I have all the mentioned attributes available (is_featured looks to be the only custom one)
(此主题是继承的,因此我对它的工作原理并不了解100%!我只是将其复制过来)
(this theme was inherited, so I'm not 100% versed in how it works! I'm simply copying it across)
推荐答案
我当前正在使用1.7,并且每当我收到在非对象上调用成员函数getBackend()的错误..."错误时,通常是由于调用了错误的模型,或者是对该集合中不存在的属性应用了过滤器.
I'm currently using 1.7, and whenever I get the "Call to a member function getBackend() on a non-object..." error, it's usually due to calling up the wrong model, or applying a filter to an attribute that doesn't exist in that collection.
在测试您的代码后,如果我注释掉此行,它将正常工作(大部分...):
After testing your code, it works without issue (mostly...) if I comment out this line:
->addAttributeToFilter('is_featured', 1)
我的建议是仔细检查您当前安装的产品属性ID是否存在,并将其设置为正确的作用域(全局/正确的商店?").
My suggestion is to double-check that the product attribute id exists on your current installation, and it is set to the correct scope (Global / Correct Store?).
如果确实存在,另一种解决方案是手动选择特色产品,您可能想尝试使用:
If it does exist correctly, another solution is to have the featured products selected manually, you may want to try using:
Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect(array('name', 'url', 'small_image', 'price', 'short_description'))
->addFieldToFilter('is_featured', 1)
->addFieldToFilter('status', 1)
->addStoreFilter($storeId)
->clear()->setPageSize(3)->load(); //setPageSize = How Many Products To Show
然后查看是否可以解决该问题.
And see if that fixes it.
这篇关于Magento-致命错误:在第816行的app/code/core/Mage/Eav/Model/Entity/Abstract.php中的非对象上调用成员函数getBackend()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!