PHP / Magento:根据类别页面上的子类别按产品显示,排序和限制

时间:2014-06-25 04:14:08

标签: php magento

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

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

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

Pasta,Spaghetti 1lb,Pesto 12 pc,Tortellini 1 PC。

等等,显示每个子类别名称后跟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>

1 个答案:

答案 0 :(得分:1)

下面我记录了一个想法,我认为这是一个想法..请原谅我粗暴的风格。正如我刚刚使用的一个项目,我正在努力将它们放在一起。如有任何问题请咨询。 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>