Избегайте отображения продуктов, отсутствующих на складе, в разделе "Распродажа".
В разделе Конфигурация -> Инвентарь -> Отображать товары, отсутствующие на складе, я установил значение Да, потому что товары, отсутствующие на складе, доступны поисковым системам, хотя я не хочу, чтобы товары, отсутствующие на складе, отображались в разделе "Распродажа". Есть ли какой-либо способ добиться этого путем применения фильтров? Ниже приведен весь код моего 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"> </td>
<?php endif; ?>
<?php endfor; ?>
</tr>
<?php endfor; ?>
</table>
<script type="text/javascript">decorateTable('upsell-product-table')</script>
</div>
<?php endif ?>
1
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