LC_Page_Products_List.php の lfGetProductsList にいろいろ
修正したので Ex の方に変更した lfGetProductsList の処理を書いてます。
/* 商品一覧の表示 */
function lfGetProductsList($searchCondition, $disp_number, $startno, $linemax, &$objProduct) {
$arrval_order = array();
$objQuery =& SC_Query_Ex::getSingletonInstance();
if (strlen($searchCondition['where_category']) >= 1) {
$dtb_product_categories = "(SELECT * FROM dtb_product_categories WHERE " . $searchCondition['where_category'] . ")";
$arrval_order = array_merge($searchCondition['arrvalCategory'], $searchCondition['arrvalCategory']);
} else {
$dtb_product_categories = "dtb_product_categories";
}
$order = <<< __EOS__
(
SELECT
T3.rank
FROM
$dtb_product_categories T2
JOIN dtb_category T3
USING (category_id)
WHERE T2.product_id = alldtl.product_id
ORDER BY T3.rank DESC, T2.rank DESC
LIMIT 1
) DESC,
(
SELECT
T2.rank
FROM
$dtb_product_categories T2
JOIN dtb_category T3
USING (category_id)
WHERE T2.product_id = alldtl.product_id
ORDER BY T3.rank DESC, T2.rank DESC
LIMIT 1
) DESC,
product_id
__EOS__;
// 表示順序
switch ($this->orderby) {
case "all":
switch ($this->orderby2) {
// 全ての商品の販売価格が安い順
case "price_low":
$this->flg = false;
$objProduct->setProductsOrder("price02", "dtb_products_class", "ASC");
$this->tpl_linemax = $this->lfGetProductAllNum($searchCondition, $this->flg);
break;
// 全ての商品の販売価格が高い順
case "price_high":
$this->flg = false;
$objProduct->setProductsOrder("price02", "dtb_products_class", "DESC");
$this->tpl_linemax = $this->lfGetProductAllNum($searchCondition, $this->flg);
break;
// 全ての商品の新着順
case "date":
$this->flg = false;
$objProduct->setProductsOrder("create_date", "dtb_products", "DESC");
$this->tpl_linemax = $this->lfGetProductAllNum($searchCondition, $this->flg);
break;
default:
$this->flg = false;
$this->tpl_linemax = $this->lfGetProductAllNum($searchCondition, $this->flg);
$objQuery->setOrder($order);
break;
}
break;
case "stock":
default:
switch ($this->orderby2) {
// 在庫ありの販売価格が安い順
case "price_low":
$objProduct->setProductsOrder("price02", "dtb_products_class", "ASC");
break;
// 在庫ありの販売価格が高い順
case "price_high":
$objProduct->setProductsOrder("price02", "dtb_products_class", "DESC");
break;
// 在庫ありの新着順
case "date":
$objProduct->setProductsOrder("create_date", "dtb_products", "DESC");
break;
default:
$this->flg = true;
$objQuery->setOrder($order);
break;
}
break;
}
// 取得範囲の指定(開始行番号、行数のセット)
$objQuery->setLimitOffset($disp_number, $startno);
$objQuery->setWhere($searchCondition['where']);
// 表示すべきIDとそのIDの並び順を一気に取得
$arrProductId = $objProduct->findProductIdsOrder($objQuery, array_merge($searchCondition['arrval'], $arrval_order), $this->flg);
$objQuery =& SC_Query_Ex::getSingletonInstance();
$arrProducts = $objProduct->getListByProductIds($objQuery, $arrProductId);
// 取得している並び順で並び替え
$arrProducts2 = array();
foreach ($arrProducts as $item) {
$arrProducts2[$item['product_id']] = $item;
}
$arrProducts = array();
foreach ($arrProductId as $product_id) {
$arrProducts[] = $arrProducts2[$product_id];
}
// 規格を設定
$objProduct->setProductsClassByProductIds($arrProductId);
$arrProducts += array("productStatus" => $objProduct->getProductStatus($arrProductId));
return $arrProducts;
}