2014-06-05 149 views
0

我需要在產品視圖頁面中顯示產品列表。經過非常深入的研究後,我發現如果在產品視圖頁面內調用block type =「catalog/product_list」,塊類型不起作用,那麼......通用地稱之爲可以顯示的產品列表的方式是什麼在類別和產品視圖頁面中都是如此。如何在產品視圖中調用產品列表Magento

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

功能,products.phtml調用由分類標識的產品收集過濾器給定:

<?php 
    $_productCollection=$this->getLoadedProductCollection(); 
    $_helper = $this->helper('catalog/output'); 
    $cat_id = $this->category_id; 
    $cat = Mage::getModel('catalog/category')->load($cat_id); 
?> 
我不能在view.phtml文件中的代碼,產品清單,我想顯示被稱爲

感謝您的幫助

回答

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它擁有一些塊和一些其他的東西。

位置:應用程序的/ etc /模塊/ Programmerrkt_Listinview.xml

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

它使你的模塊活躍,並保持它的版本。

位置:應用程序/代碼/本地/ Programmerrkt/Listinview /座/目錄/產品/ 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 我希望它會有所幫助。謝謝

程序員_rkt

+0

你真棒老兄,非常感謝! –

+0

高興地幫助你。 :) –