Я хотел бы попросить помощь в моем запросе.
Я создал страницу CMS и хотел бы показывать товары из определенной категории в списке. Поэтому я создал модуль и вставил полный код из каталога / product / list.phtml, чтобы узнать, будет ли это работать …
К сожалению, я получил эту ошибку: Fatal error: Call to a member function count() on a non-object in /Applications/MAMP/htdocs/mysite/app/design/frontend/bootstrapped/default/template/cmsproducts/index.phtml on line 23
Вот код из list.phtml
<?php echo get_class($this); /** * Magento responsive theme * * @category design * @package bootstrapped_default * @copyright Copyright (c) 2012 Magenthon (http://magenthon.com) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * @author Vedran Subotic <vedran@magenthon.com> */ ?> <?php /** * Product list template * * @see Mage_Catalog_Block_Product_List */ ?> <?php $_productCollection=$this->getLoadedProductCollection(); $_helper = $this->helper('catalog/output'); ?> <?php if(!$_productCollection->count()): ?> <div class="alert fade in"> <a class="close" data-dismiss="alert">×</a> <?php echo $this->__('There are no products matching the selection.') ?> </div> <?php else: ?> <div class="category-products"> <?php echo $this->getToolbarHtml() ?> <?php // List mode ?> <?php if($this->getMode()!='grid'): ?> <?php $_iterator = 0; ?> <ol class="products-list unstyled row-fluid" id="products-list"> <?php foreach ($_productCollection as $_product): ?> <li class="item<?php if( ++$_iterator == sizeof($_productCollection) ): ?> last<?php endif; ?> row-fluid"> <?php // Product Image ?> <div class="span4"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image thumbnail"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(225); ?>" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a></div> <?php // Product description ?> <div class="span8"> <div class="thumbnail data"> <div class="caption"> <?php $_productNameStripped = $this->stripTags($_product->getName(), null, true); ?> <h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped; ?>"><?php echo $_helper->productAttribute($_product, $_product->getName() , 'name'); ?></a></h2> <?php if($_product->getRatingSummary()): ?> <?php echo $this->getReviewsSummaryHtml($_product) ?> <?php endif; ?> <div class="row-fluid"> <span class="pull-right"> <?php if($_product->isSaleable()): ?> <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="btn btn-danger" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button> <?php else: ?> <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p> <?php endif; ?> </span> <?php echo $this->getPriceHtml($_product, true) ?> </div> <div class="desc std"> <?php echo $_helper->productAttribute($_product, $_product->getShortDescription(), 'short_description') ?> <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped ?>" class="link-learn"><?php echo $this->__('Learn More') ?></a> </div> <p class="add-to-links unstyled"> <?php if ($this->helper('wishlist')->isAllow()) : ?> <a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist label label-info"><?php echo $this->__('Add to Wishlist') ?></a> <?php endif; ?> <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?> <span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare label label-info"><?php echo $this->__('Add to Compare') ?></a> <?php endif; ?> </p> </div> </div> </div> </li><hr> <?php endforeach; ?> </ol> <script type="text/javascript">decorateList('products-list', 'none-recursive')</script> <?php else: ?> <?php // Grid Mode ?> <?php $_collectionSize = $_productCollection->count() ?> <?php $_columnCount = $this->getColumnCount(); ?> <?php $i=0; foreach ($_productCollection as $_product): ?> <?php if ($i++%$_columnCount==0): ?> <ul class="products-grid unstyled thumbnails row-fluid"> <?php endif ?> <li class="item<?php if(($i-1)%$_columnCount==0): ?> first<?php elseif($i%$_columnCount==0): ?> last<?php endif; ?> span4"> <div class="thumbnail"> <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image thumbnail"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(225); ?>" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a> <div class="caption"> <h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></a></h2> <?php if($_product->getRatingSummary()): ?> <?php echo $this->getReviewsSummaryHtml($_product, 'short') ?> <?php endif; ?> <?php echo $this->getPriceHtml($_product, true) ?> <?php if($_product->isSaleable()): ?> <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="btn btn-danger btn-mini" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button> <?php else: ?> <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p> <?php endif; ?> <p class="add-to-links unstyled"> <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?> <a href="<?php echo $_compareUrl ?>" class="link-compare label label-info pull-right"><?php echo $this->__('Add to Compare') ?></a> <?php endif; ?> <?php if ($this->helper('wishlist')->isAllow()) : ?> <a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist label label-info"><?php echo $this->__('Add to Wishlist') ?></a> <?php endif; ?> </p> </div> </div> </li> <?php if ($i%$_columnCount==0 || $i==$_collectionSize): ?> </ul> <?php endif ?> <?php endforeach ?> <script type="text/javascript">decorateGeneric($$('ul.products-grid'), ['odd','even','first','last'])</script> <?php endif; ?> <div class="toolbar-bottom"> <?php /* @var $toolbar Mage_Catalog_Block_Product_List_Toolbar */ // get toolbars limits - overrides default pager limit $toolbar = Mage::getBlockSingleton('catalog/product_list_toolbar')->getAvailableLimit(); /* @var $pager Mage_Page_Block_Html_Pager */ $pager = $this->getLayout()->createBlock('page/html_pager', 'bootstrapped.standalone.pager'); // set limit - uses category's instead of default pager's (10-20-50) $pager->setAvailableLimit($toolbar); // need to set collection $pager->setCollection($_productCollection); //set custom template $pager->setTemplate('catalog/product/list/pager.phtml'); echo $pager->toHtml(); ?> </div> </div> <?php endif; ?>
И для моего блока CMS:
{{block type="core/template" category_id="41" template="cmsproducts/index.phtml"}}
indexController.php для моего настраиваемого модуля:
<?php class Thaneuk_Cmsproducts_IndexController extends Mage_Core_Controller_Front_Action{ public function IndexAction() { } }
Я искал способы добавления продуктов из категории на страницу CMS, но каждый метод приводит к ошибке или продуктам, которые не отображаются.
Может ли кто-нибудь помочь или передать мне шаг за шагом руководство, которое работает?
заранее спасибо
Простое исправление, чтобы оно не выдавало ошибку, было бы
<?php if(is_object($_productCollection) && !$_productCollection->count()): ?>
Но вам все равно нужно выяснить недостаток вашего кода в том, почему $_productCollection
не загружается.
Решила!
<?php $category_id = "43"; // category_id for "Featured Products" $_productCollection = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSelect(array('name', 'price', 'small_image', 'short_description'), 'inner') ->addCategoryFilter(Mage::getModel('catalog/category')->load($category_id)); ?> <?php if($_productCollection->count()): ?> <div class="featured"> <br /> <ul id="featured-product-list"> <div class="block-title"> <h3><span><?php echo $this->__('FEATURED PRODUCT'); ?></span></h3> </div> <?php $products = array(); foreach ($_productCollection as $_product) { ?> <li class="featured-product"> <!--<h6>Price <?php echo Mage::helper('core')->currency($_product->getPrice());; ?></h6>--> <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>"> <img class="product-image" src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(225, 200); ?>" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" title="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" /> </a> </li> <strong><a class="view-item-button" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><?php echo $this->__('Order'); ?> <?php echo $this->htmlEscape($_product->getName())?><?php echo $this->__('™'); ?></a></strong> <div class="clearfix"></div> <p> <?php echo $_product->_data['short_description']; ?> </p> <div class="clearfix"></div> <?php } ?> </ul> </div> <?php endif; ?>
такая же ошибка произошла со мной. Я использую magento 1.9.1 на сервере XAMPP. Я только отменил все индексы magento, и все работает нормально.
перейдите в систему / Управление индексами выберите все параметры и выполните «данные reindex» Action