0

我正在尝试从特定制造商那里获得最新的 3 种产品。我尝试这样做的地方是产品页面,因此我必须找到该产品与哪个制造商相关联并显示最新产品。

这是我到目前为止得到的代码,它可以工作,但显示随机产品取决于我输入的数字->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; ?>

谢谢你。

4

3 回答 3

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);
于 2013-03-12T15:52:40.077 回答
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) {
    // ..
}
于 2013-03-12T16:42:18.347 回答
0

非常感谢 Andrew 和 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; ?>
于 2013-03-13T15:30:46.093 回答