Magento 1.4 - 显示特定类别的某些产品

时间:2010-11-11 16:30:58

标签: magento

您好 我已经为一个名为Phone的类别分配了20个产品,我想创建一个模块来检索这些产品并显示为列表格式。有人能告诉我怎么做吗?

感谢

3 个答案:

答案 0 :(得分: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-创建“app / code / local / [Namespace] /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-通过创建类覆盖块:“app / code / local / [Namespace] /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-覆盖您的主题以添加产品限制功能:

将“app / design / frontend / default / default / template / catalog / product / list.phtml”复制到“app / design / frontend / default / [your_theme] /template/catalog/product/list.phtml”< / p>

// 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"}}

希望这有助于某人。

答案 1 :(得分:1)

要创建使用类别执行某项操作的窗口小部件(可以通过cms插入),首先要创建一个标准模块结构:   /块   /等等   /帮手   /型号

请注意,在我的代码示例和文件名中,您需要将[Namespace],[Module]和[module]替换为您要使用的相应命名空间和模块。案例很重要!

首先创建app / code / local / [Namespace] / [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>

然后创建一个app / code / local / [Namespace] / [Module] /etc/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>

然后是app / code / local / [Namespace] / [Module] /Helper/Data.php

中的强制性Helper文件
 <?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;
    }
}

最后在模块方面的一个块进入app / code / local / [Namespace] / [Module] /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-&gt; getCategory()来获取类别并从那里开始。您可以轻松自定义这些示例中包含的块,以显示默认的magento产品列表网格,而不是使用自定义.phtml文件。

答案 2 :(得分: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"}}. 

我只是打开了

app / design / frontend / base / default / template / 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文件并删除了所有项目,如图片,添加到购物车按钮,评论等,直到我只剩下基本的链接产品标题以及类别标题完好无损。

我希望这可以帮助别人,因为我花了好几个小时试图解决这个问题。