如何在产品视图Magento中调用产品列表 [英] How to call a product list in a produt view Magento

查看:54
本文介绍了如何在产品视图Magento中调用产品列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在产品视图页面中显示产品列表.经过大量深入的研究,我发现如果在产品视图页面中调用了块type ="catalog/product_list",则该块将不起作用,因此...普遍"调用可以显示的产品列表的方法是什么在类别和产品视图页面中??? 我无法在view.phtml文件中进行编码,我要显示的产品列表的调用方式为:

I need to display a product list in a product-view page. After a very intensive research i found that a block type="catalog/product_list" doesn't work if its called within a product-view page, so...what is the way to "universally" call a product list that can display in both category and product view pages???. I can't code in view.phtml file, the product list i want to display is called by:

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

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

featured-products.phtml calls the product collection filter by the category id given:

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

感谢您的帮助

推荐答案

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

You can do this by creating your own module. Try this. Here I am calling our module as Listinview.

我们的模块将具有以下文件.

Our module going to have following files.

模块的配置文件

位置:应用程序/代码/本地/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它包含一些积木和一些其他东西.

This file defines your modules configuration. It tells magento that it holds some blocks and some other stuffs.

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

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

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

It makes your module active and keep its version.

位置: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来定义要加载的所需类别.

This file defines the product collection method that we are going to use in our module. Since we need to load list according to a particular category, we are using a variable $_defaultCategoryId in order to define the required category to load.

注意:该文件应扩展Mage_Catalog_Block_Product_List

位置:app/design/<your_package>/<your_theme>/layout/programmerrkt_listinview.xml

Location:app/design/<your_package>/<your_theme>/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页面上添加我们的自定义代码块(用于显示模块内容).

This is our module's layout definition. As you can see, it will add our custom block (that we are using to show our modules content) to product view page.

位置:app/design/frontend/<your_package>/<your_theme>/template/programmerrkt/listinview/catalog/product/list.phtml

Location:app/design/frontend/<your_package>/<your_theme>/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文件进行任何更改,以获取所需的视图.

This content is actually rendering in frontend. Actually I just copied the content of app/design/frontend/base/default/template/catalog/product/list.phtml and pasted it in this file. Since we changed the method of loading product collection according to our need through controller file, now it will show all product in the desired category at the bottom section of product view page. Now you can do any changes to this phtml file in order to get your desired view.

在此处查找此模块: https ://github.com/progammer-rkt/Magent-Modules/tree/master/product-list-in-prdouct-view 希望对您有所帮助.谢谢

Find this module here : https://github.com/progammer-rkt/Magent-Modules/tree/master/product-list-in-prdouct-view I hope it will help. Thanks

Programmer_rkt

Programmer_rkt

这篇关于如何在产品视图Magento中调用产品列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆