Получение этой ошибки при попытке использования настраиваемого фильтра внутри настраиваемой темы.
Я установил новый атрибут «is_featured» и его в набор атрибутов. Я сделал продукт, который назначил его как признанный (да / нет выбор)
Моя домашняя страница (в разделе CMS) включает в себя следующую «панель»,
<block type="catalog/product" name="catalog.product_featured_list" template="catalog/product/featured_list.phtml" after="-"/>
featured_list.phtml выглядит так:
<?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; ?>
Похоже, проблема связана с коллекцией в начале блока. (Я могу удалить эту панель из домашней страницы, и сайт загрузится нормально)
Я уверен, что у меня есть все перечисленные атрибуты (is_featured выглядит как единственный пользовательский)
(эта тема была унаследована, поэтому я не на 100% разбираюсь в том, как она работает! Я просто копирую ее)
В настоящее время я использую 1,7, и всякий раз, когда я получаю сообщение «Вызов функции-члена getBackend () на ошибке не-объекта …», обычно это связано с вызовом неправильной модели или применением фильтра к атрибуту, который не существует в этой коллекции.
После тестирования кода он работает без проблем (в основном …), если я прокомментирую эту строку:
->addAttributeToFilter('is_featured', 1)
Мое предложение состоит в том, чтобы дважды проверить, что идентификатор атрибута продукта существует в вашей текущей установке, и он установлен в правильную область (Global / Correct Store?).
Если он существует правильно, другим решением является выбор вручную выбранных продуктов, вы можете попробовать:
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
И посмотрим, исправляет ли это это.