2013-04-11 61 views
1

我正在开发一个显示所有具有特殊价格设置的产品的页面。如何避免使用此脚本重复产品(Magento)

如果我有一个“正常”的设置,这很容易,但我的商店只显示分组产品。所有简单产品都只是与分组产品相关联的SKU。分组产品包含描述,产品名称等所有常规信息,简单产品包含SKU,价格,增值税等信息。

考虑到这一点,我认为我只需将所有简单产品有特殊的价格和加载他们的“父母”分组产品。

哪些方法可行,但会出现一个新问题:存在具有多个特殊价格SKU关联的分组产品。意思是,该产品将在页面上显示两次,三次或甚至更多。这是有道理考虑我的代码:

<?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> 

我的问题是,我将如何限制此脚本显示一个分组产品只有一次?

回答

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. 
    } 
} 

报告如有该解决方案适合你。

+0

嗨Jari, 我不得不对你的代码进行一些更改以使其适用于我的情况,因为我的问题是分组产品加载两次,并且分组的产品没有SKU。所以我就这样做了,它会将ID而不是SKU放入数组中。还必须在它上面有加载父脚本。非常感谢!这确实是一个很好的解决方案,应该想到这一点! :) – pedropeixoto 2013-04-11 15:05:50

+0

不客气^^ – vikingmaster 2013-04-11 15:06:25