1

Magento サイトで「ベストセラー製品」リストを生成しようとしています。hereからの回答をたどってみました。これは問題なく機能しますが、これは単純な製品にのみ理想的であることに気付きました。構成可能な製品のランキングを作成しようとしているので、最初に単純な製品の合計注文を取得する必要があると思いますが、プログラムでどのようにできるかわかりません。これは基本的に私が念頭に置いているアイデアです:

構成可能な製品に関連付けられた単純な製品を取得する

各単純な製品の合計注文を取得し、それらを合計します

合計を構成可能な製品に再度渡し(ここでは配列を使用することを考えています)、ランキング順に並べられた必要なデータを呼び出します。

これまでのところ、私はこのコードを思いつきました:

$storeId = Mage::app()->getStore()->getId();
$_collection = Mage::getResourceModel('reports/product_collection')
                    ->addAttributeToSelect('*')
                    ->addAttributeToFilter('type_id', 'configurable');
foreach($_collection as $c):
$configurable = $c->getTypeInstance()->getUsedProductIds();
foreach($configurable as $_config):
    $_simple = Mage::getModel('catalog/product')->load($_config);
                echo $_simple->getName()."<br/>";
                echo "qty:".(int)$_simple->ordered_qty."<br/>";
            endforeach;
        endforeach;

ただし、テストしようとすると、すべての数量が 0 を返すため、行き詰まります。構成可能製品のランキングを実装するにはどうすればよいですか? お知らせ下さい。また、可能であれば、コア ファイルの変更を最小限に抑えたいと考えています。

また、このランキング リストは 10 個に制限されており、他の製品の販売数量が 0 の場合、自動的にアルファベット順に並べ替えられます。たとえば、2 つの商品の販売額が同じ場合も同様です。

4

2 に答える 2

0

文字通り8時間以上これを理解しようとした後. 私は何らかの回避策を考え出しました(少なくとも私の場合はうまくいくようです)。コードには多くの改善が必要であるため、回答に対する変更や提案を喜んで受け入れます。これが私が思いついたコードです:

$filler = array();

$productCollection = Mage::getResourceModel('reports/product_collection')
            ->addAttributeToSelect('*')
            ->addAttributeToFilter('type_id', 'configurable')
            ->addOrderedQty()
            ->setOrder('ordered_qty', 'desc')
            ->setPage(1, 10);

foreach($productCollection as $product):
    echo "name:".$product->getName()." - qty:".(int)$product->ordered_qty."<br/>";
    array_push($filler, $product->getId());
endforeach;

if(count($productCollection) < 10):
    $add = 10 - count($productCollection);

    $fillCollection = Mage::getResourceModel('reports/product_collection')
            ->addAttributeToSelect('*')
            ->addAttributeToFilter('type_id', 'configurable')
            ->setOrder('name', 'desc');

    foreach($fillCollection as $item): 
        if(in_array($item->getId(), $filler)):
        else:
            if($add > 0):
                echo "name:".$item->getName()." - qty: 0 <br/>";
                $add = $add - 1;
            endif;
        endif;
    endforeach;
endif;  
unset($filler);

したがって、これの基本的な考え方は、注文のある製品のコレクションのみを取得することです。表示されるように、注文のない製品は取得されないためです。その後、ランキングに 10 個の製品を表示するためにまだ必要なアイテムの数を取得します。次に、別の製品のコレクションを取得し、表示される製品が 10 個未満である限り、それらをエコーし​​ます。フィラー配列を使用して、最初のコレクションによって既に呼び出された製品が表示されないようにしました。このコードを使用すると、magento サイトで最も売れている製品のランキングが得られます。

于 2013-09-06T03:41:52.147 に答える