我怎么能只显示一个所有子类别magento的最新产品?

时间:2013-12-30 10:38:36

标签: php magento magento-1.7

在类别视图页面上,我得到了所有子类别的ID。 我可以使用类别ID显示该类别的所有产品。我已使用以下链接成功获得所有产品列表。 但我想首先使用子类别的产品。 浏览图片以获得更好的理解。

enter image description here

这里是化妆品类别的视图页面。遮瑕膏和粉底是chils类别。  我想要第一个最新的儿童类产品。

这是视图页面的代码。

<?php
        $_helper    = $this->helper('catalog/output');
        $_category  = $this->getCurrentCategory();
        $_imgHtml   = '';
        if ($_imgUrl = $_category->getImageUrl()) {
            $_imgHtml = '<p class="category-image"><img src="'.$_imgUrl.'" alt="'.$this->htmlEscape($_category->getName()).'" title="'.$this->htmlEscape($_category->getName()).'" /></p>';
            $_imgHtml = $_helper->categoryAttribute($_category, $_imgHtml, 'image');
        }
    ?>
    <div class="grid_24">
        <?php if($this->IsRssCatalogEnable() && $this->IsTopCategory()): ?>
            <a href="<?php echo $this->getRssLink() ?>" class="link-rss"><?php echo $this->__('Subscribe to RSS Feed') ?></a>
        <?php endif; ?>
        <h1 class="main-title"><?php echo $_helper->categoryAttribute($_category, $_category->getName(), 'name') ?></h1>
    </div>


    <?php foreach ($this->getCurrentCategory()->getChildrenCategories() as $_subcat){
            foreach($_subcat->getChildrenCategories() as $child){
            $cat_id=$child->getId();    

     ?>
            <div class="grid_12">
                <div class="category-wrapper">
                    <div class="ribbon">
                        <h2><?php echo Mage::helper('catalog/output')->categoryAttribute($child, $child->getName(), 'name') ?></h2>
                    </div>          
                </div>
            </div>

        <?php
        $category = new Mage_Catalog_Model_Category();
        $category->load($cat_id);
        $collection = $category->getProductCollection();
        $collection->addAttributeToSelect('*');

        foreach ($collection as $_product) { ?>

        <a href="<?php echo $_product->getProductUrl() ?>"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(200); ?>" width="200" height="200" alt="" /></a> <a href="<?php echo $_product->getProductUrl(); ?>"><?php echo $_product->getName(); ?></a>

    <?php } ?>    


        <a href="<?php echo $child->getUrl() ?>" id="<?php echo $cat_id;?>"><?php echo Mage::helper('catalog/output')->categoryAttribute($child, $child->getName(), 'name') ?></a>

    <?php }}?>   

1 个答案:

答案 0 :(得分:0)

您需要更改产品集合声明,以便它能够满足您的需求。通过添加限制,它只会为该类别带出一个产品(因为您正在加载一个产品而不是所有产品,因此也会提高性能)。然后,您可以使用订单声明来提取该类别的最新产品。

$collection = $category->getProductCollection();
$collection->getSelect()->order('catalog_product_entity.entity_id DESC')->limit(1);

基本上使用magento集合,如果您没有通过调用load方法实际加载集合或开始循环它,您可以更改sql以使其为您提供所需的内容。我们在几年前做了类似的事情,但是通过拉出该类别中销量最大的产品。如果您拥有类别或产品的大型数据库,可能希望在块和模板中添加块缓存。

有时候做的便宜事是;

var_dump($collection->getSelect()->__toString()); die();

这将输出将要执行的生成的sql,您可以通过这种方式调试复杂的SQL查询。