Избегайте отображения продуктов, отсутствующих на складе, в разделе "Распродажа".


В разделе Конфигурация -> Инвентарь -> Отображать товары, отсутствующие на складе, я установил значение Да, потому что товары, отсутствующие на складе, доступны поисковым системам, хотя я не хочу, чтобы товары, отсутствующие на складе, отображались в разделе "Распродажа". Есть ли какой-либо способ добиться этого путем применения фильтров? Ниже приведен весь код моего upsell.phtml.

<?php if (count($this->getItemCollection()->getItems())): ?>

    <div class="collateral-box up-sell">

        <div class="head"><h4><?php echo $this->__('You may also be interested in the following product(s):') ?></h4></div>

        <table cellspacing="0" class="generic-product-grid catalog-listing" id="upsell-product-table">

            <?php // $this->setColumnCount(4); // uncomment this line if you want to have another number of columns. also can be changed in layout ?>

            <?php $this->resetItemsIterator() ?>

            <?php for ($_i = 0; $_i < $this->getRowCount(); $_i++): ?>

                <tr>

                    <?php for ($_j = 0; $_j < $this->getColumnCount(); $_j++): ?>

                        <?php if ($_link = $this->getIterableItem()): ?>

                            <?php $_link = Mage::getModel('catalog/product')->load($_link->getId()); ?>

                            <td> 

                                <p class="product-image"><a href="<?php echo $_link->getProductUrl() ?>"><img src="<?php echo $this->helper('catalog/image')->init($_link, 'small_image')->resize(125) ?>" width="125" height="125" alt="<?php echo $this->htmlEscape($_link->getName()) ?>" /></a></p>

                                <h5><a href="<?php echo $this->getUrl($_link->getUrlPath()) ?>"><?php echo $this->htmlEscape($_link->getName()) ?></a></h5>

                                <?php //echo $this->getPriceHtml($_link, true) ?>

                                <?php //echo $this->getReviewsSummaryHtml($_link) ?>

                            </td>

                        <?php else: ?>

                            <td class="empty-product">&nbsp;</td>

                        <?php endif; ?>

                    <?php endfor; ?>

                </tr>

            <?php endfor; ?>

        </table>

        <script type="text/javascript">decorateTable('upsell-product-table')</script>

    </div>

<?php endif ?> 
Author: Kevin S, 2014-03-06

1 answers

Вы можете наблюдать это событие catalog_product_upsell.
Он получает в качестве параметра список продуктов, которые продаются выше. Вы можете проверить, нет ли их на складе, и удалить их из коллекции.

public function filterUpsells($observer) {
    $collection = $observer->getEvent()->getCollection();
    foreach ($collection as $item) {
        if (!$item->getIsSalable()) {
            $collection->removeItemByKey($item->getId())
        }
    }
}
 2
Author: Marius, 2014-03-06 12:33:57