【问题标题】:How to call a product list in a produt view Magento如何在产品视图中调用产品列表 Magento
【发布时间】:2014-06-05 21:23:24
【问题描述】:

我需要在产品查看页面中显示产品列表。经过深入研究后,我发现如果在产品视图页面中调用块 type="catalog/product_list" 则它不起作用,所以......“普遍”调用可以显示的产品列表的方法是什么在类别和产品视图页面中???。 我无法在 view.phtml 文件中编码,我要显示的产品列表被调用:

 {{block type="catalog/product_list" category_id="12" template="catalog/product/featured-products.phtml"}}

featured-products.phtml 通过给定的类别 ID 调用产品集合过滤器:

<?php
    $_productCollection=$this->getLoadedProductCollection();
    $_helper = $this->helper('catalog/output');
    $cat_id = $this->category_id;
    $cat = Mage::getModel('catalog/category')->load($cat_id);
?>

感谢您的帮助

【问题讨论】:

    标签: php magento zend-framework


    【解决方案1】:

    您可以通过创建自己的模块来做到这一点。试试这个。这里我将我们的模块称为Listinview

    我们的模块将有以下文件。

    模块的配置文件

    位置:app/code/local/Programmerrkt/Listinview/etc/config.xml

    <config>
    <modules>
        <Programmerrkt_Listinview>
            <version>0.1.0</version>
        </Programmerrkt_Listinview>
    </modules>
    <frontend>
        <layout>
            <updates>
                <programmerrkt_listinview>
                    <file>programmerrkt_listinview.xml</file>
                </programmerrkt_listinview>
            </updates>
        </layout>
    </frontend>
    <global>
        <blocks>
            <programmerrkt_listinview>
                <class>Programmerrkt_Listinview_Block</class>
            </programmerrkt_listinview>
        </blocks>
    </global>
    </config>
    

    此文件定义您的模块配置。它告诉 magento 它拥有一些块和其他一些东西。

    位置:app/etc/modules/Programmerrkt_Listinview.xml

     <config>
    <modules>
        <Programmerrkt_Listinview>
            <active>true</active>
            <codePool>local</codePool>
        </Programmerrkt_Listinview>
    </modules>
    </config>
    

    它使您的模块处于活动状态并保持其版本。

    位置:app/code/local/Programmerrkt/Listinview/Block/Catalog/Product/List.php

     <?php
    
    class Programmerrkt_Listinview_Block_Catalog_Product_List extends Mage_Catalog_Block_Product_List
    {
    
        /**
         * Default Category that is going to load
         *
         * @var string
         */
        protected $_defaultCategoryId = '12';
    
        /**
         * Default toolbar block name
         *
         * @var string
         */
        protected $_defaultToolbarBlock = 'catalog/product_list_toolbar';
    
        /**
         * Product Collection
         *
         * @var Mage_Eav_Model_Entity_Collection_Abstract
         */
        protected $_productCollection;
    
        /**
         * Retrieve loaded category collection
         *
         * @return Mage_Eav_Model_Entity_Collection_Abstract
         */
        protected function _getProductCollection()
        {
            if (is_null($this->_productCollection)) {
    
                $layer = $this->getLayer();
                $category = Mage::getModel('catalog/category')->load($this->_defaultCategoryId);
                if ($category->getId()) {
                        $origCategory = $layer->getCurrentCategory();
                        $layer->setCurrentCategory($category);
                        $this->addModelTags($category);
                }
    
                $this->_productCollection = $layer->getProductCollection();
    
                $this->prepareSortableFieldsByCategory($layer->getCurrentCategory());
    
                if ($origCategory) {
                    $layer->setCurrentCategory($origCategory);
                }
            }
    
            return $this->_productCollection;
        }
    
        /*
            Calling method from view
        */
        public function getLoadedProductCollection()
        {
            return $this->_getProductCollection();
        }
    }
    

    这个文件定义了我们将在我们的模块中使用的产品收集方法。由于我们需要根据特定类别加载列表,因此我们使用变量$_defaultCategoryId 来定义要加载的所需类别。

    注意:这个文件应该扩展Mage_Catalog_Block_Product_List

    位置:app/design/&lt;your_package&gt;/&lt;your_theme&gt;/layout/programmerrkt_listinview.xml

    <layout>
    <catalog_product_view>
           <reference name="content">
                <block type="programmerrkt_listinview/catalog_product_list" name="listinview_list" as="listinview_list" template="programmerrkt/listinview/catalog/product/list.phtml" />
           </reference>
    </catalog_product_view>
    </layout>
    

    这是我们模块的布局定义。如您所见,它将我们的自定义块(我们用来显示我们的模块内容)添加到product view 页面。

    位置:app/design/frontend/&lt;your_package&gt;/&lt;your_theme&gt;/template/programmerrkt/listinview/catalog/product/list.phtml

    <?php
        $_productCollection=$this->getLoadedProductCollection();
        $_helper = $this->helper('catalog/output');
    ?>
    <?php if(!$_productCollection->count()): ?>
    <p class="note-msg"><?php echo $this->__('There are no products matching the selection.') ?></p>
    <?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" id="products-list">
        <?php foreach ($_productCollection as $_product): ?>
            <li class="item<?php if( ++$_iterator == sizeof($_productCollection) ): ?> last<?php endif; ?>">
                <?php // Product Image ?>
                <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(135); ?>" width="135" height="135" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a>
                <?php // Product description ?>
                <div class="product-shop">
                    <div class="f-fix">
                        <?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; ?>
                        <?php echo $this->getPriceHtml($_product, true) ?>
                        <?php if($_product->isSaleable()): ?>
                            <p><button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p>
                        <?php else: ?>
                            <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
                        <?php endif; ?>
                        <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>
                        <ul class="add-to-links">
                            <?php if ($this->helper('wishlist')->isAllow()) : ?>
                                <li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
                            <?php endif; ?>
                            <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?>
                                <li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
                            <?php endif; ?>
                        </ul>
                    </div>
                </div>
            </li>
        <?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">
            <?php endif ?>
                <li class="item<?php if(($i-1)%$_columnCount==0): ?> first<?php elseif($i%$_columnCount==0): ?> last<?php endif; ?>">
                    <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(135); ?>" width="135" height="135" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a>
                    <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) ?>
                    <div class="actions">
                        <?php if($_product->isSaleable()): ?>
                            <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" 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; ?>
                        <ul class="add-to-links">
                            <?php if ($this->helper('wishlist')->isAllow()) : ?>
                                <li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
                            <?php endif; ?>
                            <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?>
                                <li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
                            <?php endif; ?>
                        </ul>
                    </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 echo $this->getToolbarHtml() ?>
        </div>
    </div>
    <?php endif; ?>
    

    此内容实际上是在前端呈现的。其实我只是复制了app/design/frontend/base/default/template/catalog/product/list.phtml的内容,粘贴到了这个文件中。由于我们根据需要通过控制器文件更改了加载产品集合的方法,现在它将在product view页面底部显示所需类别中的所有产品。现在您可以对该 phtml 文件进行任何更改以获得您想要的视图。

    在这里找到这个模块:https://github.com/progammer-rkt/Magent-Modules/tree/master/product-list-in-prdouct-view 我希望它会有所帮助。谢谢

    程序员_rkt

    【讨论】:

    • 很高兴为您提供帮助。 :)
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多