2013-03-12 104 views
0

我正試圖從特定製造商處獲得最新的3款產品。我試圖做的這個地方是一個產品頁面,所以我必須找到該產品與哪個製造商相關聯並顯示最新產品。Magento顯示製造商的最新產品

這裏是我到目前爲止的代碼,它的工作原理,但顯示隨機產品取決於我放在->addAttributeToFilter()號碼。

是否->addAttributeToFilter()實際上能夠過濾製造商?如果沒有,還有什麼應該用來使其工作?

<?php $_productCollection = Mage::getResourceModel('reports/product_collection') 
        ->addAttributeToSelect('*') 
        //->addAttributeToFilter('manufacturer', 23) 
        ->addAttributeToFilter(array(array('attribute'=> 'manufacturer', 18))) 
        ->setVisibility(array(2,3,4))     
        ->setOrder('created_at', 'desc') 
        ->setPage(1, 3); ?> 


<?php foreach($_productCollection as $_product) : ?> 

<li class="arrowksleeper"> 
    <div class="menugridprodcont"> 
    <div><a href="<?php echo $_product->getProductUrl(); ?>"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(170, 100); ?>" alt="" /></a></div> 
    <div id="menugridprodtitle"><a href="<?php echo $_product->getProductUrl(); ?>" title="<?php echo $_product->getName(); ?>"><?php echo $_product->getName(); ?></a></div> 
    </div> 
</li> 

<?php endforeach; ?> 

謝謝。

回答

0

addAttributeToFilter的工作方式是傳遞屬性名稱,然後是一個數組,描述如何過濾它(除非您傳遞的數組是'null''notnull'而不是數組)。你可能想要更像這樣的東西。

addAttributeToFilter('manufacturer', array('eq' => 18)); 

完整的工作代碼。這假設'18'是製造商的有效屬性。您可以通過檢查Catalog-> Attributes-> ManageAttributes-> Manufacturer-> Labels的表單來獲得這些信息。

$col = Mage::getModel('catalog/product')->getCollection() 
       ->addAttributeToSelect('*') 
       ->addAttributeToFilter('manufacturer', array('eq'=> 18))  
       ->setOrder('created_at', 'desc') 
       ->setPage(1, 3); 
+0

我也試過之前,但沒有,它讓我隨機的東西 – 2013-03-12 16:19:26

+0

那麼它是沒有錯的。所以,其他的東西在這裏是不對的。在foreach之前你可以echo或error_log'$ _productCollection-> getSelect();'?然後你可以看到SQL是如何運行的,並發現它是隨機的。 – 2013-03-12 16:33:12

+0

$ _productCollection-> getSelect();在foreach之前,你會發現沒有好的ti不會在這個時候彙集查詢。 – Andrew 2013-03-12 16:37:57

0

爲什麼使用報告集合?這不會加載了製造商的屬性,使用主產品收集...

試試這個:

$collection = Mage::getModel('catalog/product')->getCollection(); 
$collection->addAttributeToSelect('*'); 
$collection->addAttributeToSelect('manufacturer'); 

//$collection->addFieldToFilter(array(
//  array('name' => 'manufacturer', 'eq' => 'ibm'), 
//)); 

$collection->addAttributeToFilter('manufacturer', array('eq' => 99)); 
$collection->setOrder('created_at', 'desc'); 
$collection->setCurPage(1)->setPageSize(5); // first 5 products.. 

foreach($collection as $product) { 
    // .. 
} 
+0

我正在使用它,因爲產品收集它doesn不幸的是......事實上,你的腳本給出了一個500錯誤'ERR(3):注意:應用/代碼/核心/ Mage/Eav/Model/Entity/Collection/Abstract.php中的未定義索引:314行314行' – 2013-03-12 17:08:46

+0

大聲笑我甚至沒有注意到他沒有使用'目錄/產品' – 2013-03-12 17:25:28

+0

嘗試改變你自己使用目錄/產品集合而不是報告集合 – Andrew 2013-03-12 17:26:07

0

非常感謝安德魯和Jared的時間花在試圖幫助我。不幸的是,他們提供的腳本不適合我(這並不意味着他們的腳本不適合你),所以我也在下面發帖,我是如何管理它的。

爲了工作下面的腳本應該放在app/design/frontend/default/YOUR-THEME/template/catalog/product/view.phtml

<?php 
$manuId = $_product->getManufacturer(); // getting manufacturer's id 

$_productCollection = Mage::getResourceModel('reports/product_collection') 
        ->addAttributeToSelect('*') 
        ->addAttributeToFilter('manufacturer', array('eq'=> $manuId)) // $manuId: printing manufacturer's id 
        ->setVisibility(array(2,3,4)) 
        ->setOrder('created_at', 'desc') 
        ->setPage(1, 3); ?> 

<?php foreach($_productCollection as $_product) : ?> 

    <div> 
    <div><a href="<?php echo $_product->getProductUrl(); ?>"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(170, 100); ?>" alt="" /></a></div> 
    <div><a href="<?php echo $_product->getProductUrl(); ?>" title="<?php echo $_product->getName(); ?>"><?php echo $_product->getName(); ?></a></div> 
    </div> 

<?php endforeach; ?>