PHP/Magento:显示,排序,并限制基于子类的产品在分类页面


PHP/Magento: Show, sort , and limit by products based on subcategory on category page

如何按子类别对分类页面上的产品进行排序,并限制每个子类别中的产品数量:

例如,如果类别是Food,我希望显示以下内容:

饮料可乐12盎司,橙汁8盎司,牛奶加仑,

意大利面,意大利面1lb,香蒜沙司12个,意大利饺子1个

依此类推,显示每个子类别名称后面跟着3个产品(图像等)

我目前有一个自定义模板,可以显示子类别,但不能找出产品,

    <?php
    $_category = $this->getCurrentCategory();
    $collection = $_category->getCollection()
        ->addAttributeToSelect(
            array('url_key','name','all_children','is_anchor','description','image')
        )
        ->addAttributeToFilter('is_active', 1)
        ->addIdFilter($_category->getChildren())
        ->setOrder('position', 'ASC')
        ->joinUrlRewrite();
    $helper = Mage::helper('catalog/category');
?>
<ul>
<?php foreach ($collection as $cat): ?>
<li>
    <div class="level1descript">
        <a href="<?php echo $helper->getCategoryUrl($cat); ?>">
            <img src="<?php echo $cat->getImageUrl(); ?>" class="catlevel1image" />
            <h2><?php echo $cat->getName(); ?></h2>
        </a>
        <p class="level1descript">
        <?php
            $catdesc = '';
            $catdesc = strip_tags($cat->getDescription());
            if (strlen($catdesc) > 300) {
                $catdesc = substr($catdesc, 0, 300) . ' ...';
            }
            echo $catdesc;
        ?>
        </p>
    </div>
    <?php 
        $childLevel2Category = $cat->getCollection()
            ->addAttributeToSelect(
                array('url_key','name','all_children','is_anchor','description','image')
            )
            ->addAttributeToFilter('is_active', 1)
            ->addIdFilter($cat->getChildren())
            ->setOrder('position', 'ASC')
            ->joinUrlRewrite();
    ?>
    <ul>
        <?php foreach ($childLevel2Category as $catLevel2) { ?>
        <li class="level2cats">
            <a href="<?php echo $helper->getCategoryUrl($catLevel2); ?>">
                <img src="<?php echo $catLevel2->getImageUrl(); ?>" class="catlevel2image" />
                <h4><?php echo $catLevel2->getName(); ?></h4>
            </a>
            <p class="level2descript">
            <?php
                $catdesc = '';
                $catdesc = strip_tags($catLevel2->getDescription());
                if (strlen($catdesc) > 60) {
                    $catdesc = substr($catdesc, 0, 60) . ' ...';
                }
                echo $catdesc;
            ?>
        </li>
        <?php } ?>
    </ul>
</li>
<?php endforeach;?>
</ul>

下面我记录了一个想法,我认为这是一个想法。请原谅我的笨拙风格。因为我只是用我正在做的一个项目把它放在一起。有问题请提。setPageSize方法将拉出默认情况下在子类别中显示的前3个产品。

<!-- Finding Current Category and Finding it's children -->
<?php
$category = Mage::getSingleton('catalog/layer')->getCurrentCategory();
$categories = $category->getCollection()
        ->addAttributeToSelect(array('name', 'thumbnail'))
        ->addAttributeToFilter('is_active', 1)
        ->addIdFilter($category->getChildren())
?>
<div class="subcategories">
    <p>Select a category to view products:</p>
    <ul class="clearfix">
    <!-- Display Each Subcategory Image and Name  -->
    <?php foreach ($categories as $category): ?>
        <li class="grid12-3">
            <a href="<?php echo $category->getUrl() ?>" class="clearfix">
                <?php if($thumbFile = $category->getThumbnail()): ?>
                <img src="<?php echo Mage::getBaseUrl('media') . 'catalog' . DS . 'category' . DS . $thumbFile;?>" alt="<?php echo $this->htmlEscape($category->getName()) ?>" />
                <?php endif;?>
                <span><?php echo $category->getName() ?></span></a>
        </li>
        <!-- Load (3) Products from within each subcategory  -->
        <?php
        $_helper = $this->helper('catalog/output');
        $products = Mage::getModel('catalog/product')
            ->getCollection()
            ->addCategoryFilter($category)
            ->setPageSize(3)
            ->addAttributeToSelect(array('name', 'product_url', 'small_image'))
            ->load();
        ?>
        <!-- Display Each product's detailed info  -->
        <?php foreach ($products as $product): ?>
            <li>
            <?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 ?>
            <?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>
            </li>
        <?php endforeach ; ?>
    <?php endforeach; ?>
    </ul>
</div>