結論 : ShoppingServiceのgetFormDeliveryDates()を確認する。
config.ymlでdeliv_date_end_maxを設定すると表示される選択肢の日数を変更できる。
注文時に選択可能なお届け日を調整する方法をご紹介します。
この選択可能な日付のリストは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 ($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;
}
コードを簡単に説明すると配送時に最大となる商品日数を取得し、そこにdeliv_date_end_maxで指定した日数分の配列を作成しています。(デフォルト21日)
選択できる日付を変更するには、このメソッドでreturnする配列を修正してやればOKです。
EC-CUBEをご利用の方はぜひお試しください。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。
EC-CUBEゴールドパートナー