как я могу отобразить только один недавний продукт со всеми подкатегориями 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="<?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 }}?>   

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