EC-CUBEでは注文確認画面で選択できるお届け日は管理画面の商品マスタで商品ごとに指定するように設計されています。
ただしお届け可能日を注文から何日以内というように固定にしたい場合もあると思います。
お届け候補日の一覧を取得しているPHPコードはShoppingService::getFormDeliveryDatesです。
このメソッドで商品にお届けまでの日数が指定されているかどうかをチェックしています。
/**
* お届け日を取得
*
* @param Order $Order
* @return array
*/
public function getFormDeliveryDates(Order $Order)
{
// お届け日の設定
$minDate = 0;
$deliveryDateFlag = false;
// 配送時に最大となる商品日数を取得
foreach ($Order->getOrderDetails() as $detail) {
$deliveryDate = $detail->getProductClass()->getDeliveryDate();
if (!is_null($deliveryDate)) {
if ($deliveryDate->getValue() < 0) {
// 配送日数がマイナスの場合はお取り寄せなのでスキップする
$deliveryDateFlag = false;
break;
}
if ($minDate < $deliveryDate->getValue()) {
$minDate = $deliveryDate->getValue();
}
// 配送日数が設定されている
$deliveryDateFlag = true;
}
}
// 配達最大日数期間を設定
$deliveryDates = array();
// 配送日数が設定されている
if ($deliveryDateFlag) {
$period = new \DatePeriod (
new \DateTime($minDate.' day'),
new \DateInterval('P1D'),
new \DateTime($minDate + $this->app['config']['deliv_date_end_max'].' day')
);
foreach ($period as $day) {
$deliveryDates[$day->format('Y/m/d')] = $day->format('Y/m/d');
}
}
return $deliveryDates;
}
このメソッドを次のように書き換えれば商品に依存せず、お届け日の固定表示が可能です。
/**
* お届け日を取得
*
* @param Order $Order
* @return array
*/
public function getFormDeliveryDates(Order $Order)
{
// お届け日の設定
$minDate = 0;
// 配達最大日数期間を設定
$deliveryDates = array();
$period = new \DatePeriod (
new \DateTime($minDate.' day'),
new \DateInterval('P1D'),
new \DateTime($minDate + $this->app['config']['deliv_date_end_max'].' day')
);
foreach ($period as $day) {
$deliveryDates[$day->format('Y/m/d')] = $day->format('Y/m/d');
}
return $deliveryDates;
}
表示する日数はconfig.ymlで「deliv_date_end_max: 10」というように指定することが可能です。
EC-CUBEでお届け可能日を変更したい方はぜひお試しください。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。
EC-CUBEゴールドパートナー