2012-07-15 75 views
2

我需要帮助隐藏没有图像的Magento产品或首先使用图像显示产品。Magento - 如何隐藏没有图像的产品

我看到这个$ this-> getLoadedProductCollection() - > setOrder('image'/ *或small_image * /,'desc')在回答另一个问题时首先加载所有带有图像的产品。但它不适合我。

我在Magento 1.6.2上。

在此先感谢。

更新:请参阅下面我的完整list.phtml。我认为我做错了什么。谢谢。

<?php 
$_productCollection=$this->getLoadedProductCollection(); 
$_productCollection->addAttributeToFilter('image', array('neq' => 'no_selection')); 
$_helper = $this->helper('catalog/output'); 
$now = date("Y-m-d H:m:s");  

?> 
<?php if(!$_productCollection->count()): ?> 
<p class="note-msg"><?php echo $this->__('There are no products matching the selection.') ?></p> 
<?php else: ?> 
<div class="category-products"> 
<?php echo $this->getToolbarHtml() ?> 
<?php // List mode ?> 
<?php if($this->getMode()!='grid'): ?> 
<?php $_iterator = 0; ?> 
<ol class="products-list" id="products-list"> 
<?php foreach ($_productCollection as $_product): ?> 
    <li class="item<?php if(++$_iterator == sizeof($_productCollection)): ?> last<?php endif; ?>"> 
      <?php $newFromDate = $_product->getNewsFromDate(); ?> 
      <?php $newToDate = $_product->getNewsToDate(); ?>            
      <?php if($newFromDate < $now && $newToDate > $now): ?> 
        <div class="newproduct_grid"><?php echo $this->__('New Product') ?></div> 
      <?php endif; ?>  
     <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(192); ?>" width="192" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a> 
     <?php // Product description ?> 
     <div class="product-shop"> 
      <div class="f-fix"> 
       <?php $_productNameStripped = $this->stripTags($_product->getName(), null, true); ?> 
       <h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped; ?>"><?php echo $_helper->productAttribute($_product, $_product->getName() , 'name'); ?></a></h2> 
       <?php if($_product->getRatingSummary()): ?> 
       <?php echo $this->getReviewsSummaryHtml($_product) ?> 
       <?php endif; ?> 
       <div id="productimgover<?php echo $_product->getId()?>" style="display: none;"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(64); ?>" width="64" height="64" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></div> 
       <div id='productname<?php echo $_product->getId()?>' style='display:none'><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></div> 
       <div class="desc std"> 
        <?php echo $_helper->productAttribute($_product, $_product->getShortDescription(), 'short_description') ?> 
        <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped ?>" class="link-learn"><?php echo $this->__('Learn More') ?></a> 
       </div> 
       <ul class="add-to-links"> 
        <?php if ($this->helper('wishlist')->isAllow()) : ?> 
         <li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li> 
        <?php endif; ?> 
        <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?> 
         <li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li> 
        <?php endif; ?> 
       </ul> 
      </div> 
      <div style="clear: both;"></div> 
     </div> 
     <div class="addtocont"> 
      <?php echo $this->getPriceHtml($_product, true) ?> 
      <?php if($_product->isInStock()): ?> 
            <?php if (!($_product->getTypeInstance(true)->hasRequiredOptions($_product) || $_product->isGrouped())) { ?> 
          <p><button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocationAjax('<?php echo $this->getAddToCartUrl($_product) ?>','<?php echo $_product->getId()?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p> 

         <?php } else { ?> 
          <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="showOptions('<?php echo $_product->getId()?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button> 
          <a href='<?php echo $this->getUrl('ajax/index/options',array('product_id'=>$_product->getId()));?>' class='fancybox' id='fancybox<?php echo $_product->getId()?>' style="display: none;" ><?php echo $this->__('Add to Cart') ?></a> 
         <?php } ?> 
      <?php else: ?> 
      <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p> 
      <?php endif; ?>    
     </div> 
    </li> 
<?php endforeach; ?> 
</ol> 
<script type="text/javascript">decorateList('products-list', 'none-recursive')</script> 

<?php else: ?> 

<?php // Grid Mode ?> 

<?php $_collectionSize = $_productCollection->count() ?> 
<?php $_columnCount = $this->getColumnCount(); ?> 
<?php $i=0; foreach ($_productCollection as $_product): ?> 
    <?php if ($i++%$_columnCount==0): ?> 
    <ul class="products-grid"> 
    <?php endif ?> 
     <li class="item<?php if(($i-1)%$_columnCount==0): ?> first<?php elseif($i%$_columnCount==0): ?> last<?php endif; ?>"> 
      <?php if($_product->getRatingSummary()): ?> 
       <?php echo $this->getReviewsSummaryHtml($_product, 'short') ?> 
      <?php endif; ?> 
      <?php $newFromDate = $_product->getNewsFromDate(); ?> 
      <?php $newToDate = $_product->getNewsToDate(); ?>            
      <?php if($newFromDate < $now && $newToDate > $now): ?> 
        <div class="newproduct_grid"><?php echo $this->__('New Product') ?></div> 
      <?php endif; ?> 
      <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(220); ?>" width="220" height="220" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a> 
      <div id="productimgover<?php echo $_product->getId()?>" style="display: none;"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(64); ?>" width="64" height="64" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></div> 
      <div class="moreinfo"> 
       <h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></a></h2> 
       <div id='productname<?php echo $_product->getId()?>' style='display:none'><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></div> 
       <?php echo $this->getPriceHtml($_product, true) ?> 
        <?php if($_product->isInStock()): ?> 
         <?php if (!($_product->getTypeInstance(true)->hasRequiredOptions($_product) || $_product->isGrouped())) { ?> 
          <p><button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocationAjax('<?php echo $this->getAddToCartUrl($_product) ?>','<?php echo $_product->getId()?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p> 

         <?php } else { ?> 
          <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="showOptions('<?php echo $_product->getId()?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button> 
          <a href='<?php echo $this->getUrl('ajax/index/options',array('product_id'=>$_product->getId()));?>' class='fancybox' id='fancybox<?php echo $_product->getId()?>' style="display: none;" ><?php echo $this->__('Add to Cart') ?></a> 
         <?php } ?> 
        <?php else: ?> 
         <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p> 
        <?php endif; ?> 
        <div class="clear"></div> 
        <ul class="add-to-links"> 
         <?php if ($this->helper('wishlist')->isAllow()) : ?> 
          <li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li> 
         <?php endif; ?> 
         <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?> 
          <li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li> 
         <?php endif; ?> 
        </ul> 
        <div class="clear"></div> 
      </div> 
     </li> 
    <?php if ($i%$_columnCount==0 || $i==$_collectionSize): ?> 
    </ul> 
    <?php endif ?> 
    <?php endforeach ?> 
    <script type="text/javascript">decorateGeneric($$('ul.products-grid'), ['odd','even','first','last'])</script> 

<?php endif; ?> 
    <script type="text/javascript"> 
    jQuery.noConflict(); 
    jQuery('.fancybox').fancybox({ 
     hideOnContentClick : true, 
     width: 582, 
     autoDimensions: true, 
     type : 'iframe', 
     showTitle: false, 
     scrolling: 'no', 
     onComplete: function(){ //Resize the iframe to correct size 
     jQuery('#fancybox-frame').load(function() { // wait for frame to load and then gets it's height 
      jQuery('#fancybox-content').height(jQuery(this).contents().find('body').height()+30); 
      jQuery.fancybox.resize(); 
     }); 

     } 
    });   
    function showOptions(id){ 
     jQuery('#fancybox'+id).trigger('click'); 
    } 
    function setAjaxData(data,iframe){ 
     if(data.status == 'ERROR'){ 
      alert(data.message); 
     }else{ 
      if(jQuery('.block-cart')){ 
       jQuery('.block-cart').replaceWith(data.sidebar); 
      } 
      if(jQuery('.header .block-cart-header')){ 
       jQuery('.header .block-cart-header').replaceWith(data.topcart); 
      } 
      jQuery.fancybox.close(); 
     } 
    } 
    function setLocationAjax(url,id){ 
     url += 'isAjax/1'; 
     url = url.replace("checkout/cart","ajax/index"); 
     var msgHtml; 
     var productImg = jQuery('#productimgover' + id).html(); 
     var windowOver = jQuery('#addedoverlay'); 
     var windowBox = jQuery('#added'); 
     var titleForBox = jQuery('#productname' + id).text(); 
     windowOver.show(); 
     windowBox.show().css({ 
      backgroundImage: "url('<?php echo $this->getSkinUrl('images/loading.gif')?>')" 
     }); 
     try { 
      jQuery.ajax({ 
       url : url, 
       dataType : 'json', 
       success : function(data) { 
        if(data.status == 'SUCCESS'){  
         msgHtml = '<div style="float:left;">' + productImg + '</div><em>' + titleForBox + '</em> <?php echo $this->__('was successfully added to your shopping cart.') ?><div style="clear:both;"></div><a id="hidewindow" href="javascript:void(0);"><?php echo $this->__('Continue shopping') ?></a>&nbsp;<a href="<?php echo $this->getUrl('checkout/cart')?>"><?php echo $this->__('View cart & checkout') ?></a>';    
        }else{ 
         msgHtml = '<p class="error-msg" style="margin-bottom:15px;">' + data.message + '</p><a id="hidewindow" href="javascript:void(0);"><?php echo $this->__('Continue shopping') ?></a>&nbsp;<a href="<?php echo $this->getUrl('checkout/cart')?>"><?php echo $this->__('View cart & checkout') ?></a>'; 
        }    
        setAjaxData(data,false); 

        windowBox.css({ 
          backgroundImage: 'none' 
        }).html(msgHtml);      
        windowOver.one('click',function(){ 
         hidewindow(windowBox,windowOver);      
        });   

        jQuery('#hidewindow').click(function(){ 
         hidewindow(windowBox,windowOver);      
        });       
       } 
      }); 
     } catch (e) { 
     } 
    } 
    function hidewindow(windowBox,windowOver){ 
     windowOver.fadeOut(400); 
     windowBox.fadeOut(400).html('');  
    }   
    </script> 
<div class="toolbar-bottom"> 
    <?php echo $this->getToolbarHtml() ?> 
</div> 

回答

3

基于答案here但添加非等效NO_SELECTION这应该让你只图像产品。

//this builds a collection that's analagous to 
//select * from products where image != 'no_selection' 
$products = Mage::getModel('catalog/product') 
->getCollection() 
->addAttributeToSelect('*') 
->addAttributeToFilter('image', array('neq' => 'no_selection')); 

foreach($products as $product) 
{ 

}  
在产品列表页

,你可以做这样的事情:

//$_productCollection=$this->getLoadedProductCollection(); 
$_productCollection = clone $this->getLoadedProductCollection(); 
$_productCollection->clear() 
        ->addAttributeToFilter('image', array('neq' => 'no_selection')) 
        ->load(); 

编辑

已加载的getLoadedProductCollection集合,因此需要对其进行克隆,清除,然后装。请参阅here

+0

任何兼容请?我真的需要完成这件事。请帮帮我。 – user1527556 2012-07-17 15:18:03

+0

我更新了我的答案。对不起,以前的代码不会工作,因为集合已经加载。新的应该为你工作,我测试了它。 – 2012-07-18 02:14:12

+0

非常感谢你。这工作完美。 – user1527556 2012-07-18 16:21:19

0

我试过Dreaded Semicolon的解决方案,它运行良好,他们发现它已停止工作。此外,我注意到它有时会奏效,然后莫名其妙地停止随机工作。

我的猜测是,这有什么做的模型,也许只是有时它使可用于产品收集主图像(这可以解释为什么有时工作,有时没有。)

无论如何如果您有解决困难,并通知您的产品没有图像仍显示,只是尝试以下操作:

替换:

'image' 

有了:

'small_image' 

像这样:

//$_productCollection=$this->getLoadedProductCollection(); 
$_productCollection = clone $this->getLoadedProductCollection(); 
$_productCollection->clear() 
        ->addAttributeToFilter('small_image', array('neq' => 'no_selection')) 
        ->load(); 

您也可以尝试R.S's answer他通过XML添加图像页面。您可能还需要将所有属性添加到集合使用:

->addAttributeToSelect('*') 
0

矿是Magento 1.8.0。1,我做这些:

  1. 补充:

$collection->addAttributeToFilter('small_image', array('neq' => "no_selection"));

在/app/code/core/Mage/Catalog/Block/Product/List.php(For线#157分页以反映过滤)并将其复制到Folder:/ app/code/local/Mage/Catalog/Block/Product /(本地更改)

  1. Then Admin> Configuration> Catalog >前端>使用平面目录产品到“否”

由于这种过滤不符合使用“平目录产品”