2012-10-25 11 views
7

Otrzymanie tego błędu podczas próby użycia funkcji niestandardowy filtr wewnątrz niestandardowego motywu.Magento - Błąd krytyczny: wywołanie funkcji członkowskiej getBackend() na obiekcie niebędącym obiektem w aplikacji/kod/core/Mag/Eav/Model/Jednostka/Abstract.php na linii 816

Ustawiłem nowy atrybut "is_featured" i jego w zestawie atrybutów. Zrobiłem produkt, który przypisany jako wyróżniona (tak/nie ma wyboru)

Moja strona domowa (w sekcji CMS) jest łącznie z następującym „panel”

<block type="catalog/product" name="catalog.product_featured_list" template="catalog/product/featured_list.phtml" after="-"/> 

featured_list.phtml wygląda tak:

<?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; ?> 

Wygląda na to, że problem dotyczy kolekcji na początku bloku. (Mogę usunąć ten panel tworząc stronę główną, a strona ładuje fine)

Jestem całkiem pewien, że mam wszystkie dostępne wymienione atrybuty (is_featured wydaje się być jedynym niestandardową)

(ten temat został odziedziczony, więc nie jestem w 100% zorientowany, jak to działa! Po prostu kopiuję go przez)

Odpowiedz

10

Obecnie używam 1.7, a gdy tylko otrzymam "Zadzwoń do funkcji członkowskiej getBackend() na błąd nieobiektowy ... ", zazwyczaj jest to spowodowane wywołaniem niewłaściwego modelu lub zastosowaniem filtru do atrybutu, który nie istnieje w tym zbiorze.

Po przetestowaniu swój kod, to działa bez problemu (w większości ...), gdybym skomentować tę linię:

->addAttributeToFilter('is_featured', 1) 

moja propozycja jest dokładnie sprawdzić, że atrybut id produkt istnieje w bieżącej instalacji i jest ustawiony na poprawny zakres (Global/Correct Store?).

Jeśli istnieje poprawnie, innym rozwiązaniem jest mieć biorące produkty wybierane ręcznie, można spróbować użyć:

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 

i sprawdzić, czy to rozwiązuje go.