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

柔情痞子 提交于 2019-12-12 08:36:09

问题


Getting this error when trying to use a custom filter inside a custom theme.

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)

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 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 &pound;<?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)

I'm pretty sure I have all the mentioned attributes available (is_featured looks to be the only custom one)

(this theme was inherited, so I'm not 100% versed in how it works! I'm simply copying it across)


回答1:


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)

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.




回答2:


In my case it helped to out comment this line (Line 765)

$customer->changeResetPasswordLinkCustomerId($newResetPasswordLinkCustomerId);

in

/app/code/core/Mage/Customer/controllers/AccountController.php

I think it could be also important to check weather the update script updated your database correctly. F.e. upgrade-1.6.2.0.6-1.6.2.0.7.php creates a table called rp_customer_id



来源:https://stackoverflow.com/questions/13070652/magento-fatal-error-call-to-a-member-function-getbackend-on-a-non-object-in

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!