質問 > フロント機能 > 特定の都道府県のみ、合計金額〇〇円以上は送料無料としたい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
wp_sd |
投稿日時: 2021/10/27 10:43
対応状況: −−−
|
新米 登録日: 2021/4/13 居住地: 投稿: 5 |
特定の都道府県のみ、合計金額〇〇円以上は送料無料としたい [EC-CUBE] 4.0.6-p1
[レンタルサーバ] さくらサーバー [OS] FreeBSD www1978.sakura.ne.jp 11.2-RELEASE-p14 FreeBSD 11.2-RELEASE-p14 [PHP] 7.3.30 [データベース] MySQL 5.7.32-log [WEBサーバ] Apache [ブラウザ] Mozilla/5.0 (Windows NT 10.0; Win64; x64) [導入プラグインの有無] 有 ・Breadcram4 ・会員項目追加プラグイン ・EC-CUBEペイメントLite ・商品詳細「表」追加プラグイン ・商品オプションプラグイン ・商品表示項目追加プラグイン ・商品検索拡張プラグイン ・Securitychecker4 ・最近チェックの商品 ・オススメ商品管理プラグイン ・ピックアップ商品管理プラグイン ・関連商品プラグイン [カスタマイズの有無] 無 [現象] 管理画面の「設定>基本設定>送料設定」は何も設定していません。 「設定>店舗設定>配送方法設定」で現在有効なのは、「日本郵便」と「店舗受取」のみです。 「日本郵便」の「都道府県別送料設定」では、各都道府県別に送料を設定しています。 全国一律の設定はしていません。 この状態で「特定の都道府県だけ、購入合計金額が3,000円以上の場合は送料無料」としたいのですが、まずどのphpを修正すればよいのでしょうか? DeliveryFeeFreeByShippingPreprocessor.php 、DeliveryFeeFreePreprocessor.php あたりでしょうか? また上記phpである場合、process()の中で条件分岐をし、当てはまれば「$isDeliveryFree = true;」もしくは「$item->setQuantity(0);」とすればよいのでしょうか? おわかりの方、どうかご教示いただけませんでしょうか。 よろしくお願いいたします。 |
h_tanaka |
投稿日時: 2021/10/27 14:16
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1651 |
Re: 特定の都道府県のみ、合計金額〇〇円以上は送料無料としたい DeliveryFeeFreeByShippingPreprocessor です。
送料明細かどうかは $Item->getProcessorName() == DeliveryFeePreprocessor::class で判定できますので、この明細の数量を 0 にすれば対象の配送先における送料が0円になります。
|
wp_sd |
投稿日時: 2021/10/27 17:29
対応状況: −−−
|
新米 登録日: 2021/4/13 居住地: 投稿: 5 |
Re: 特定の都道府県のみ、合計金額〇〇円以上は送料無料としたい ご回答いただきましてありがとうございました。
早速app配下のDeliveryFeeFreeByShippingPreprocessorで、process()内の「foreach ($Order->getShippings() as $Shipping) {」に下記を追加してみたのですが送料無料にならず、管理画面の都道府県で設定した送料金額がそのまま出てしまいます。 おかしなところはございますでしょうか? 条件文がどう判断されているのか、任意のログ出力をしてみたいのですが、debug_log('メッセージ');を埋め込み、デバッグモードにすればよいでしょうか? 初歩的な質問でもうしわけありませんが、色々検索してもわからず、ご教示いただけますと幸いです。 よろしくお願いいたします。 // 送料無料の都道府県と金額 $FreePrefId = 1; $ForFreeTotal = 3000; foreach ($Shipping->getOrderItems() as $Item) { //送料明細かどうかを判断 if ($Item->getProcessorName() == DeliveryFeePreprocessor::class) { // 合計金額以上 if ($total >= $ForFreeTotal) { // お届け先判断 if ($Shipping->getPref() == $this->prefRepository->findOneBy(['id' => $FreePrefId])) { $Item->setQuantity(0); } } } } |
h_tanaka |
投稿日時: 2021/10/27 17:36
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1651 |
Re: 特定の都道府県のみ、合計金額〇〇円以上は送料無料としたい $Shipping->getPref() == $this->prefRepository->findOneBy(['id' => $FreePrefId]) この部分がEntityの比較になっているのでIDの比較にすべきかと。 debug_log() は var/log にログ出力されます。 dump() で埋め込んでデバッグモードにすれば画面上に表示されます。
|
wp_sd |
投稿日時: 2021/10/27 20:13
対応状況: −−−
|
新米 登録日: 2021/4/13 居住地: 投稿: 5 |
Re: 特定の都道府県のみ、合計金額〇〇円以上は送料無料としたい ご指摘ありがとうございました。
ID比較箇所を変更してみましたが、どうもうまくいきません。 またdump()は下記プログラム中に書いても、出力されないものでしょうか?(.envでデバッグモードにしてみましたが、表示されずです) // 送料無料の都道府県と金額 $FreePrefId = 1; $ForFreeTotal = 3000; foreach ($Shipping->getOrderItems() as $Item) { //送料明細かどうかを判断 if ($Item->getProcessorName() == DeliveryFeePreprocessor::class) { // 合計金額以上 if ($total >= $ForFreeTotal) { // お届け先判断 $PrefId = $Shipping->getPref()->getId(); if ($PrefId == $FreePrefId) { $Item->setQuantity(0); } } } } |
h_tanaka |
投稿日時: 2021/10/28 8:53
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1651 |
Re: 特定の都道府県のみ、合計金額〇〇円以上は送料無料としたい デバッグモードについてはこちらをご参考ください。
dump 内容は Symfony Toolbar に表示されます。 https://umebius.com/eccube/eccube4-enter-into-debug-mode/
|
wp_sd |
投稿日時: 2021/10/28 9:20
対応状況: −−−
|
新米 登録日: 2021/4/13 居住地: 投稿: 5 |
Re: 特定の都道府県のみ、合計金額〇〇円以上は送料無料としたい ご教示ありがとうございます。
実は.envをサイトに書かれているよう設定しているのですが、Symfony Toolbarと思われるものが何も表示されず画面上が今までと変わりません。 色々検索して、.htaccessに設定すると表示されるかもしれない、という記事がありましたので、そちらも試してみようと思います。 |
h_tanaka |
投稿日時: 2021/10/28 9:25
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1651 |
Re: 特定の都道府県のみ、合計金額〇〇円以上は送料無料としたい Symfony Toolbar は画面右下に Sf というアイコンが表示されます。
処理が重いときなどは表示までに時間がかかるときもあるので、処理の軽い管理画面TOPなどで表示されるかどうかを確認してみてください。
|
wp_sd |
投稿日時: 2021/10/28 9:45
対応状況: −−−
|
新米 登録日: 2021/4/13 居住地: 投稿: 5 |
Re: 特定の都道府県のみ、合計金額〇〇円以上は送料無料としたい おはようございます。
ありがとうございます!Sfアイコン表示されました! ブラウザの管理ツールを下に表示していたので、気づかず申し訳ございませんでした。 お手数をおかけいたしました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |