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

なぜレポート コレクションを使用しているのですか? これにはメーカー属性が読み込まれず、メインの製品コレクションを使用します...

これを試して:

$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 に答える
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 に答える