残念ながら、私は現在、このコードをテストする手段を持っていませんが、結果がどうなるか、舞台裏で実行される操作の順序をコミュニティに尋ねたかったのです. これは、フロントエンドの製品をシャッフルしてロードする (操作順序は不明) 短い PHP コードです。(A と B は、この投稿で参照するためのラベルです)
A. $productCollection = Mage::getModel('catalog/product')->getCollection()
->setPageSize(10)
->addAttributeToSort('entity_id', 'DESC');
B. if ($sortType == 'shuffle') {
$productCollection->getSelect()->order(new Zend_Db_Expr('RAND()'));
}
私の質問は、これは でクエリを設定しSELECT
、A.
クエリ文字列に順序のランダム化を追加して でクエリB.
を実行するとB.
、同じ 10 個の製品がランダムな順序で読み込まれることになりますか?
私が尋ねている理由は、私たちのサイトで実行されている以下の (簡略化された) コードでは、常に 10 個の異なるアイテムがランダムな順序で読み込まれるためです。コードが実行される順序を見ると、上で説明したように思えます。$productCollection
アイテムがすでにロードされているため、この後は反復できることに注意してください。を省略するD.
と、最新の 10 個の製品/エンティティ ID のみが取得されます。
C.
単独で製品をロードする方法は明確ではありませんD.
が、既にロードされているものをさかのぼって変更できます。
C. $productCollection = Mage::getModel('catalog/product')->getCollection()
->setPageSize(10)
->addAttributeToFilter('visibility', 3)
->addAttributeToFilter('news_from_date', array('gteq' => $date));
D. if ($sortType == 'shuffle') {
$productCollection->getSelect()->order(new Zend_Db_Expr('RAND()'));
}