3

我想就我的查询寻求一些帮助。

我创建了一个 CMS 页面,并希望在列表中显示特定类别的产品。因此,我创建了一个模块并粘贴了 catalog/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 页面的方法,但每种方法都会导致错误或产品未显示。

任何人都可以帮助或向我推荐一个可行的分步指南吗?

提前致谢

4

3 回答 3

0

使其不引发错误的简单修复将是

<?php if(is_object($_productCollection) && !$_productCollection->count()): ?>

但是您仍然需要找出代码中的缺陷,即为什么$_productCollection没有加载。

于 2012-11-29T16:51:47.123 回答
0

解决了!!

<?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->__('&#8482;'); ?></a></strong>
        <div class="clearfix"></div>
        <p>
            <?php echo $_product->_data['short_description']; ?>
        </p>
        <div class="clearfix"></div>  
        <?php } ?>
      </ul>
</div>  
<?php endif; ?>
于 2012-11-29T21:35:06.000 回答
-1

我也发生了同样的错误。我在 XAMPP 服务器上使用 magento 1.9.1。我只刷新了所有 magento 索引并且一切正常。

转到系统/索引管理选择所有选项并执行“重新索引数据”操作

于 2015-11-24T15:36:12.473 回答