как мога да покажа само един скорошен продукт с всички подкатегории magento?

На страницата за преглед на категории получавам идентификатор на всички дъщерни категории. Мога да покажа всички продукти от тази категория, като използвам идентификатор на категория. Успешно получих целия списък с продукти чрез връзката по-долу. но искам първо скорошен продукт с подкатегория. Прегледайте изображението, за да разберете по-добре.

въведете описание на изображението тук

тук страницата за преглед на категория грим. Коректорите и фон дьо тенът са категория за хлапета. искам първия най-нов продукт от детска категория.

ето кода на страницата за изглед.

<?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="/bg<?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="/bg<?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="/bg<?php echo $_product->getProductUrl(); ?>"><?php echo $_product->getName(); ?></a>

    <?php } ?>    


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

    <?php }}?>   

person Dhruv Kapatel    schedule 30.12.2013    source източник
comment
А вашият код досега е?   -  person Goikiu    schedule 30.12.2013
comment
Някакъв опит, който сте правили?   -  person Mahmood Rehman    schedule 30.12.2013
comment
редактиран въпрос с код. В момента получавам всички продукти от категория id.   -  person Dhruv Kapatel    schedule 30.12.2013


Отговори (1)


Трябва да промените декларацията за събиране на продукти, така че да прави това, което искате. Чрез добавяне на ограничение, той ще изведе само един продукт за тази категория (подобрете и производителността, защото зареждате един продукт, а не всички). След това можете да използвате изявлението за поръчка може би, за да извадите най-новия продукт за тази категория.

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

По принцип с колекциите на magento, при условие че всъщност не зареждате колекцията чрез извикване на метода за зареждане или започвате да преминавате през нея, можете да промените sql, за да ви даде това, което искате. Направихме подобно нещо преди години, но като извадихме най-продавания продукт в категорията. Може да искате да добавите блоково кеширане към вашия блок и шаблон, ако имате голяма база данни с категории или продукти.

Удобно нещо, което понякога можете да направите, е;

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

Което ще изведе генерирания sql, който ще бъде изпълнен и можете да отстранявате грешки в сложни sql заявки по този начин.

person Ashley Swatton    schedule 01.01.2014
comment
благодаря за преиграването на Ашли Суотън. но получавам празен масив, след като направя това. - person Dhruv Kapatel; 02.01.2014