我需要在产品视图页面中显示产品列表。经过非常深入的研究后,我发现块类型=“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);
?>
感谢您的帮助
答案 0 :(得分:0)
您可以通过创建自己的模块来完成此操作。试试这个。在这里,我将我们的模块称为Listinview
。
我们的模块将包含以下文件。
模块的配置文件
位置:应用程序/代码/本地/ 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/<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
页面。
位置: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文件进行任何更改,以获得所需的视图。
在此处查找此模块:https://github.com/progammer-rkt/Magent-Modules/tree/master/product-list-in-prdouct-view 我希望它会有所帮助。感谢
Programmer_rkt