1

特別価格が設定されているすべての製品を表示するページを開発しています。

「通常の」セットアップがあればこれは簡単ですが、私のストアにはグループ化された製品しか表示されません。シンプルな製品はすべて、グループ化された製品に関連付けられている SKU にすぎません。グループ化された製品には、説明、製品名などのすべての一般情報が含まれ、単純な製品には、SKU、価格、VAT などの情報が含まれます。

これを念頭に置いて、特別価格を持つすべての単純な製品を取り出して、それらの「親」グループ化された製品をロードするだけでよいと考えました。

これは機能しますが、新しい問題が発生します。複数の特別価格 SKU が関連付けられたグループ化された製品があります。つまり、その商品はページに 2 回、3 回、またはそれ以上表示されます。それは私のコードを考えると理にかなっています:

<?php $storeId = Mage::app()->getStore()->getStoreId(); ?>

<?php
$todayDate = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
$special= Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', array('neq'=>1))
    ->addAttributeToFilter('special_price', array('neq'=>''))
    ->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
    ->addAttributeToFilter('special_to_date', array('or'=> array(
    0 => array('date' => true, 'from' => $todayDate),
    1 => array('is' => new Zend_Db_Expr('null')))
), 'left')
    ->addAttributeToSort('special_from_date', 'desc');
$special->load();
?>

<div class="cat-misc">
    <?php $_columnCount = 4;?>

    <?php foreach ($special as $_product): ?>
    <?php if ($i++%$_columnCount==0): ?>
        <ul class="products-grid">
    <?php endif ?>

        <?php $parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($_product->getId()); ?>
        <?php if(isset($parentIds[0])):?>
            <?php foreach ($parentIds as $parentId): ?>
                <?php $parent = Mage::getModel('catalog/product')->load($parentId); ?>
                <?php if ($parent->getStoreId() == $storeId): ?>
                    <?php $_product = Mage::getModel('catalog/product')->load($parentId);?>
                    <?php endif; ?>
                <?php endforeach; ?>
        <?php endif; ?>

    <li class="item<?php if(($i-1)%$_columnCount==0): ?> first<?php elseif($i%$_columnCount==0): ?> last<?php endif; ?>">

        <div class="produtos_wrapper">
            <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(158, 158); ?>" width="158" height="158" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" /></a>

            <?php
            $newFromDate = Mage::getModel('catalog/product')->load($_product->getID())->getNewsFromDate();
            $newToDate = Mage::getModel('catalog/product')->load($_product->getID())->getNewsToDate();

            $now = date("Y-m-d H:m:s");

            if($newFromDate < $now && $newToDate > $now) {
                echo "<div id='simbolo_novo' class='simbolo_novo'></div>";
            }
            ?>

            <div class="titulos_wrapper">
                <p class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a><br /><span class="subtitulo"><?php echo nl2br($_product->getShortDescription()); ?></span> </p>
                <?php if($_product->getRatingSummary()): ?>
                <?php echo $this->getReviewsSummaryHtml($_product, 'short') ?>
                <?php endif; ?>
            </div>
        </div>


        <div class="actions">
            <?php if($_product->isSaleable()): ?>

            <?php else: ?>
            <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
            <?php endif; ?>

            <?php if ($this->helper('wishlist')->isAllow()) : ?>

            <?php endif; ?>
            <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?>

            <?php endif; ?>
            </ul-->
        </div>
    </li>
    <?php if ($i%$_columnCount==0 || $i==$_collectionSize): ?>
        </ul>
        <?php endif ?>

    <?php endforeach; ?>

    <div class="toolbar-bottom">
        <?php echo $this->getToolbarHtml() ?>
    </div>
</div>

私の質問は、グループ化された製品を 1 回だけ表示するようにこのスクリプトを制限するにはどうすればよいですか?

4

1 に答える 1

3

次の方法で実行できます。

$shown_skus = array() ; //Create an array to trace already displayed products

foreach($products as $product){
  if (!in_array($product['sku'], $shown_skus, true)){ //If there is no sku in array
    $shown_skus[] = $product['sku'] ; //Add the sku to the array
    //And display the product as it has not been displayed yet.
  }
}

その解決策があなたに合っているかどうかを報告してください。

于 2013-04-11T14:40:15.957 に答える