2010-11-11 101 views
0

嗨 我已将20种产品分配到一个名为Phone的类别,我想创建一个模块来检索这些产品并以列表格式显示。有人能告诉我如何做到这一点?Magento 1.4 - 显示某些特定类别下的产品

谢谢

+0

没有尝试过,我只是找到了开发自定义模块 – 2010-11-13 00:56:36

回答

1

无需创建模块。只需将它放置在布局中的一个块中即可:它将显示链接到指定类别的所有产品(ID = XXX)。

<!-- Show all products linked to this category --> 
<block type="catalog/product_list" name="best_sellers" template="catalog/product/list.phtml"> 
    <action method="setCategoryId"> 
     <category_id>XXX</category_id> 
    </action> 
</block> 

更新:

您可以创建在此改变“Mage_Catalog_Block_Product_List”模块,并添加一个方法来限制一定数量的产品。

1-创建 “应用程序/代码/本地/ [命名空间] /Catalog/etc/config.xml”,并把这个在它:

<config> 
    <modules> 
     <[Namespace]_Catalog> 
      <version>0.1.0</version> 
     </[Namespace]_Catalog> 
    </modules> 

    <global> 

     <blocks> 
      <catalog> 
       <rewrite> 
        <product_list>[Namespace]_Catalog_Block_Product_List</product_list> 
       </rewrite> 
      </catalog> 
     </blocks> 

    </global> 
</config> 

2-替代阻止通过创建类:“应用程序/代码/本地/ [命名空间] /Catalog/Block/Product/List.php “

class [Namespace]_Catalog_Block_Product_List extends Mage_Catalog_Block_Product_List 
{ 
    /** 
    * Default number of product to show. 
    * 
    * @var int default = 5 
    */ 
    private $_productCount = 5; 

    /** 
    * Initialize the number of product to show. 
    * 
    * @param int $count 
    * @return Mage_Catalog_Block_Product_List 
    */ 
    public function setProductCount($count) 
    { 
     $this->_productCount = intval($count); 

     return $this; 
    } 


    /** 
    * Get the number of product to show. 
    * 
    * @return int 
    */ 
    public function getProductCount() 
    { 
     return $this->_productCount; 
    } 
} 

3-超越控制你的主题添加的产品限制功能:

复制” 应用程序/设计/前端/default/default/template/catalog/product/list.phtml“到”应用程序/设计/前端/预设/ [your_theme] /template/catalog/product/list.phtml”

// Insert between the foreachs and <li> for the list mode and grid mode 
<?php if($_iterator < $this->getProductCount()) : ?> 
... 
// Insert between the foreachs and <li> for the list mode and grid mode 
<?php endif; ?> 

4-在主页内容选项卡,加入这一行,你想让它:

// category_id = Procucts linked to this category 
// product_count = Maximum number of product 
{{block type="catalog/product_list" category_id="7" product_count="3" template="catalog/product/list.phtml"}} 

希望这可以帮助别人。

+0

的指导,但我想在一个特定的部分以显示在主页上的产品,而不是在左/右列,还我只是想不显示10种产品全部,谢谢 – 2010-11-12 09:16:27

+0

我在Mage_Catalog_Block_Product_List上添加了一个基本模块。它使您能够显示最大数量的产品。如果缺少某些东西,请告诉我们,这样每个人都可以从中获益。 – yvoyer 2010-11-15 17:24:06

1

要创建一个使用类做一些事情,通过创建一个标准模块结构开始小部件(你可以通过CMS插入): /砌块 /等 /助手 /型号

请注意,在我的代码示例和文件名下面,您需要用您想要使用的适当名称空间和模块替换[Namespace],[Module]和[module]。案例很重要!

通过创建应用程序/代码/本地/ [命名空间]/[模块] /etc/config.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
    <[Namespace]_[Module]> 
     <version>0.0.1</version> 
    </[Namespace]_[Module]> 
    </modules> 
    <global> 
    <helpers> 
     <[module]> 
     <class>[Namespace]_[Module]_Helper</class> 
     </[module]> 
    </helpers> 
    <blocks> 
     <[module]> 
     <class>[Namespace]_[Module]_Block</class> 
     </[module]> 
    </blocks> 
    <models> 
     <[module]> 
     <class>[Namespace]_[Module]_Model</class> 
     </[module]> 
    </models> 
    </global> 
</config> 

然后创建一个应用程序/代码/本地/ [命名空间]开始/ [模块] /等/ widget.xml此部件包括一个被称为 “selected_category”

<?xml version="1.0"?> 
<widgets> 
    <[module]_category type="[module]/category"> 
    <name>[Module]: Category</name> 
    <description type="desc">Adds a [module] for a category.</description> 
    <parameters> 
     <selected_category> 
     <label>Categories</label> 
     <visible>1</visible> 
     <required>1</required> 
     <type>select</type> 
     <source_model>[module]/catopt</source_model> 
     </selected_category> 
    </parameters> 
    </[module]_category> 
</widgets> 

然后,在应用程序/代码/本地/ [命名空间]强制性助手文件设置/ [模块] /Helper/Data.php

<?php 
    class [Namespace]_[Module]_Helper_Data extends Mage_Core_Helper_Abstract 
    { 
    } 

然后是允许用户在小部件对话框中选择类别的模型。这应用于app/code/local/[Namespace]/[Module]/Model/Catopt。PHP

<?php 
class [Namespace]_[Module]_Model_Catopt 
{ 
    public function toOptionArray() 
    { 
     $category = Mage::getModel('catalog/category'); 
     $tree = $category->getTreeModel(); 
     $tree->load(); 
     $ids = $tree->getCollection()->getAllIds(); 
     $arr = array(); 
     if ($ids){ 
      foreach ($ids as $id){ 
      $cat = Mage::getModel('catalog/category'); 
      $cat->load($id); 
      array_push($arr, array('value' => $id, 'label' => $cat->getName().' ('.$cat->getProductCount().')')); 
      } 
     } 
     uasort($arr, array($this, 'labelsort')); 
     return $arr; 
    } 

    function labelsort($a, $b){ 
     if ($a['label'] == $b['label']) 
        return 0; 
       else if ($a['label'] < $b['label']) 
        return -1; 
       else 
        return 1; 
    } 
} 

最后对事物的模块侧它出现在应用程序/代码/本地/ [命名空间]的方框/ [模块] /Block/Category.php此块使用自定义的一个.phtml文件为它的显示,但是您可以通过更改块的类型并将其输入到setTemplate来更改它以使用其他任何可能需要显示的内容。

<?php 
class [Namespace]_[Module]_Block_Category 
    extends Mage_Core_Block_Template 
    implements Mage_Widget_Block_Interface 
{ 

     /** 
     * A model to serialize attributes 
     * @var Varien_Object 
     */ 
     protected $_serializer = null; 

     /** 
     * Initialization 
     */ 
     protected function _construct() 
     { 
      $this->_serializer = new Varien_Object(); 
      $this->setTemplate('[module]/[module].phtml'); 
      parent::_construct(); 
     } 

     public function getCategory(){ 
      return $this->getData('selected_category'); 
     } 
} 

不要忘记添加一个模块的安装文件/app/etc/modules/[Namespace]_[Module].xml下这样

<?xml version="1.0"?> 
<config> 
    <modules> 
     <[Namespace]_[Module]> 
      <active>true</active> 
      <codePool>local</codePool> 
      <depends> 
       <Mage_Cms /> 
      </depends> 
     </[Namespace]_[Module]> 
    </modules> 
</config> 

最后,你需要创建一个模板文件来显示块内容。这将在/app/design/frontend/default/default/template/[module]/[module].phtml

这个.phtml文件可以使用$ this-> getCategory()来获得类别并从那里。您可以轻松地自定义这些示例中包含的块,以显示默认的magento产品列表网格,而不是使用自定义的.phtml文件。

0

感谢您的信息发布。对于那些不太流利的PHP,但由于您正在寻找解决方案来显示来自给定类别的产品名称列表的人,我设法通过简单地修改其他人的模板文件来找到解决方案。对于这个解决方案,我发现最适合的延长是:

http://www.cubewebsites.com/blog/magento/extensions/freebie-magento-featured-products-widget-version-2/

(在github最新版本:https://github.com/cubewebsites/Cube-Category-Featured-Products/tags)。

登录和注销并清除缓存我能到窗口小部件插入到一个静态块和修改用于生产,我想自定义视图中的一个.phtml文件之后。

小部件看起来像这样插入时:

{{widget type="categoryfeatured/list" template="categoryfeatured/block.phtml" categories="118" num_products="10" products_per_row="1" product_type="all"}}. 

我只是开

应用程序/设计/前端/基/默认/模板/ categoryfeatured/block.phtml

复制它的内容并创建了category_product_listing.phtml

一个新的一个.phtml文件,然后指着小部件实例到新的一个.phtml文件,如下所示:

{{widget type="categoryfeatured/list" template="categoryfeatured/category_product_listing.phtml" categories="118" num_products="10" products_per_row="1" product_type="all"}}. 

然后我通过我的PHP的基本理解这一个.phtml文件去和删除图像等所有项目,添加到购物车按钮,评论,等等,直到我与只是基本的连接产品称号离开以及因为类别标题保持不变。

我希望这可以帮助别人,因为我花了数小时试图弄清楚这一点。

相关问题