2009-09-18 3 views
1

제목에서 알 수 있듯이, 홈 페이지에서 행별로 구분 된 특정 카테고리의 새로운 제품을 보여 드리고자합니다.Magento의 특정 카테고리에서 행마다 신제품을 표시하려면 어떻게합니까?

행 1 -> 카테고리에서 새로운 제품 1

행 2 -> 카테고리 2에서 새로운 제품

행 3 -> 등 카테고리 3

...

에서 새로운 제품

내 Magento Admin CMS의 홈 페이지에서 그들은 별도의 블록으로 호출됩니다 :

<block type="catalog/product_new" name="home.catalog.product.new_category_1" alias="product_new_category_1" template="catalog/product/new_category_1.phtml"> 

<block type="catalog/product_new" name="home.catalog.product.new_category_2" alias="product_new_category_2" template="catalog/product/new_category_2.phtml"> 

<block type="catalog/product_new" name="home.catalog.product.new_category_3" alias="product_new_category_3" template="catalog/product/new_category_3.phtml"> 

...etc 

기본적으로 나는 카테고리 ID 1, 카테고리 ID 2 각각에서 등 new_category_1.phtml, new_category_2.phtml, 얻을 "새로운"제품을 new.phtml을 복제하고 호출 생각 해요.

나는 Mage::getModel('catalog/category')->getCollection();, getProductCollectiongetCatId와 함께 연주하고 new.phml ( app/design/frontend/default/default/template/catalog/product/)의 사본에서 작업 얻을 수 없습니다.

아래의 코드는 작동하지만 할당 된 카테고리 ID 내에 "새"할당 된 제품을로드하지 않습니다.이 코드는 모든 제품을로드합니다.

<?php 

$cat_id = 46; // category id 
$category = Mage::getModel('catalog/category')->load($cat_id); 
$products = $category->getProductCollection()->addCategoryFilter($category)->addAttributeToSelect('*'); 

if (($products=($_products = $this->getProductCollection()) && $_products->getSize())): ?> 

<div class="hp-report"> 
    <div class="head-alt"> 
     <h2 class="title"><?php echo $this->__('New Products') ?></h2> 
    </div> 
    <table cellspacing="0" class="generic-product-grid" id="new-products-list-table"> 
     <tr> 
     <?php $i=0; foreach ($_products->getItems() as $_product): ?> 
      <?php if ($i>=4): continue; endif; ?> 

      <td> 
       <p class="product-image"> 
        <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(170) ?>" width="170" height="170" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" /></a> 
       </p> 
       <p><a class="product-name" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>)"><?php echo $this->htmlEscape($_product->getName()) ?></a></p> 
       <?php echo $this->getReviewsSummaryHtml($_product, 'short') ?> 
       <?php echo $this->getPriceHtml($_product, true, '-new') ?> 
       <?php if($_product->isSaleable()): ?> 
        <a href="<?php echo $this->getAddToCartUrl($_product) ?>"><img src="<?php echo $this->getSkinUrl('images/btn_add_to_cart.gif') ?>" alt="<?php echo $this->__('Add to Cart') ?>" title="<?php echo $this->__('Add to Cart') ?>" /></a> 
       <?php else: ?> 
       <div class="out-of-stock"><?php echo $this->__('Out of stock') ?></div> 
       <?php endif; ?> 
       <div class="clear"></div> 
       <ul class="add-to"> 
        <?php if ($this->helper('wishlist')->isAllow()) : ?> 
         <li><a href="<?php echo $this->getAddToWishlistUrl($_product) ?>" class="link-cart"><?php echo $this->__('Add to Wishlist') ?></a></li> 
        <?php endif; ?> 
        <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?> 
         <li><a href="<?php echo $_compareUrl ?>"><?php echo $this->__('Add to Compare') ?></a></li> 
        <?php endif; ?> 
       </ul> 
       </td> 
     <?php $i++; endforeach; ?> 
     <?php for($i;$i%4!=0;$i++): ?> 
       <td>&nbsp;</td> 
      <?php endfor ?> 
      </tr> 
    </table> 
    <script type="text/javascript">decorateTable('new-products-list-table');</script> 
</div> 

<?php endif; ?> 

모든 의견을 감사드립니다.

+0

저를 투표 한 사람에게. 내 질문에 무엇이 잘못되었는지 물어봐도 될까요? 의견을 보내 주시면 감사하겠습니다. – monocat

+0

나는 투표하지 않았지만 거기에는 정말로 질문이 없습니다. 당신은 "내가 어떻게이 막연한 일을하는지"묻는 것과 같습니다. "나는 X를 시도했는데 Y가 예상되었지만 Z가 발생했습니다. 무엇을 제공합니까?" 더 잘받는 경향이있다. –

+0

@Alan 방금 작업 한 코드를 추가했습니다. 당신이 도울 수 있기를 바랍니다. 감사. – monocat

답변

1

수집 쿼리를 수행하면 당신이

$todayDate = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);    
$products = $category-> 
getProductCollection()-> 
addCategoryFilter($category)-> 
addAttributeToFilter('news_from_date', array('date' => true, 'to' => $todayDate))-> 
addAttributeToFilter('news_to_date', array('or'=> array(
    0 => array('date' => true, 'from' => $todayDate), 
    1 => array('is' => new Zend_Db_Expr('null'))) 
), 'left')->    
addAttributeToSelect('*'); 

제품은 필터에 두 개의 추가 속성을 추가 할 수 있도록 "새로움"은, 두 개의 속성, news_from_date 및 news_to_date에 의해 결정됩니다 원하는 무엇을 얻어야한다 Th이. 구체적인 방법은이

/app/code/core/Mage/Catalog/Block/Product/New.php 
0

백만 덕분에 앨런에 그들은 신제품 블록에서 직접 촬영하고

addAttributeToFilter('news_from_date', array('date' => true, 'to' => $todayDate))-> 
addAttributeToFilter('news_to_date', array('or'=> array(
    0 => array('date' => true, 'from' => $todayDate), 
    1 => array('is' => new Zend_Db_Expr('null'))) 
), 'left')->    

을 것을 할 이상에서 호출합니다. 코드에서 할당 된 범주 내의 모든 제품을 계속 나열했지만 사소한 변경으로 해결되었습니다. 여기에 관심이있는 모든 사람들에게 최종 코드가 있습니다.

$_products = $category-> 
getProductCollection()-> 
addCategoryFilter($category)-> 
addAttributeToFilter('news_from_date', array('date' => true, 'to' => $todayDate))-> 
addAttributeToFilter('news_to_date', array('or'=> array(
     0 => array('date' => true, 'from' => $todayDate), 
     1 => array('is' => new Zend_Db_Expr('null'))) 
), 'left')->    
addAttributeToSelect('*'); 

if (($this->getProductCollection()) && $_products->getSize()): ?> 

new.php에서 코드를 복제하지 않고 필터를 적용 할 수있는 방법이 있습니까? 나는 코더 그 자체가 아니지만 중개 파일이 그것을 처리 할 것이라고 가정하고있다.

관련 문제