ちょっと気になってたんで、こちらのテストサイトでためしに作ってみましたが、正常に動作しますね・・・。
一応参考にしつつぱっと作ったんで、若干の差分があると思うんで内容を載せておきます。
SC_Helper_Delivery_Ex.php
#メール便対応商品
#メール便対応商品
public function getList($product_type_id = null, $has_deleted = false, $mailflag = false )
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
$col = '*';
$where = '';
$arrVal = array();
if (!$has_deleted) {
$where .= 'del_flg = 0';
}
if (!is_null($product_type_id)) {
if (!$has_deleted) {
$where .= ' AND ';
}
$where .= 'product_type_id = ?';
$arrVal[] = $product_type_id;
}
if ( $mailflag === false ) {
if($where != ""){
$where .= ' AND';
}
$where .= ' deliv_id <> ?';
$arrVal[] = 5;//メール便のdeliv_id
}
$table = 'dtb_deliv';
$objQuery->setOrder('rank DESC');
$arrRet = $objQuery->select($col, $table, $where, $arrVal);
return $arrRet;
}
SC_Helper_Purchase_Ex.php
#メール便対応商品
public function checkMailDeliverAvailable($productTypeId, &$objCartSession)
{
$objQuery = SC_Query_Ex::getSingletonInstance();
$available = false;
// カート内の情報を取得
$items = $objCartSession->getCartList($productTypeId);
$idary = array();
foreach ( $items as $key => $value ) {
if ( $value['productsClass']['product_id'] AND preg_match('/^[0-9]+$/',$value['productsClass']['product_id']) ) {
$idary[] = $value['productsClass']['product_id'];
}
}
if ( count($idary) > 0 ) {
$query = '
SELECT
IF(MAX(mail_deliver_enabled) = MIN(mail_deliver_enabled),MAX(mail_deliver_enabled),MIN(mail_deliver_enabled))
FROM
dtb_products
WHERE
product_id IN('.implode(",", array_fill(0, count($idary), "?")).')
';
$check = $objQuery->getOne($query,$idary);
if ( $check == 1 ) {
return true;
} else {
return false;
}
}
return false;
}
LC_Page_Shopping_Payment.php
$flag = $objPurchase->checkMailDeliverAvailable($cart_key, &$objCartSess) ;
$this->arrDeliv = $objDelivery->getList($cart_key,false,$flag);
//↑ここを追加
// $this->arrDeliv = $objDelivery->getList($cart_key);
テストでUPしていて、
http://skip.ec-lab.net/products/list.php?category_id=7一部カート部分テスト中ですが、配送方法を取得する部分の処理自体は同じなので参考までに。