質問 > フロント機能 > 注文ページのお客様情報に「法人/個人」のラジオボタンを追加したい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
doyuma |
投稿日時: 2025/7/2 15:47
対応状況: 確認中
|
新米 ![]() ![]() 登録日: 2025/6/25 居住地: 投稿: 3 |
注文ページのお客様情報に「法人/個人」のラジオボタンを追加したい ------------------------------------------------------------------------------------------
[EC-CUBE] 3.0.17 [レンタルサーバ] Xserver [OS] Linux sv132.xserver.jp 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 [PHP] PHP 7.0.33 [データベース] MySQL 5.7.27 [WEBサーバ] Apache [ブラウザ] Chrome138.0.7204.49(Official Build) (64 ビット) [導入プラグインの有無] 最近チェックした商品 定休日管理プラグイン 商品詳細スペック表追加プラグイン 商品おすすめ順プラグイン カテゴリスラッグ化プラグイン 最低購入数設定プラグイン [カスタマイズの有無]] ゲスト購入(shopping/nonmember)のお客様情報に「法人/個人」を追加したいです。ラジオボタンで「法人」または「個人」を選択させます。 以下、変更内容です。 【データベース】 「dtb_order」テーブルに「customer_type」のカラムを追加。 構造 タイプ - smallint(6) Null - いいえ デフォルト値 - なし 【src/Eccube/Form/Type/Front/NonMemberType.php】 // ... 既存のuse文など ... public function buildForm(FormBuilderInterface $builder, array $options) { // ... 既存のフィールド ... // ここを追加 ->add('email', 'repeated_email') ->add('customer_type', 'choice', [ 'label' => '法人/個人', 'choices' => [ '法人' => 1, '個人' => 2, ], 'choices_as_values' => true, 'expanded' => true, 'multiple' => false, 'required' => true, ]); // ... 既存のコード ... } 【src/Eccube/Entity/Order.php】 // ... 既存のコード ... /** * @var \Eccube\Entity\Master\OrderStatusColor */ private $OrderStatusColor; /** * 顧客タイプ(1:法人, 2:個人) * * @var int */ private $customer_type; // ... 既存のコード ... /** * Get customer_type * * @return int */ public function getCustomerType() { return $this->customer_type; } /** * Set customer_type * * @param int $customer_type * @return Order */ public function setCustomerType($customer_type) { $this->customer_type = (int)$customer_type; return $this; } 【src/Eccube/Service/ShoppingService.php】 /** * フォームデータを更新 * * @param Order $Order * @param array $data */ public function setFormData(Order $Order, array $data) { file_put_contents(__DIR__ . '/formdata_controller.log', print_r($data, true)); // お問い合わせ $Order->setMessage($data['message']); // ↓追加 if (isset($data['customer_type'])) { $Order->setCustomerType($data['customer_type']); } elseif (isset($data['nonmember']['customer_type'])) { $Order->setCustomerType($data['nonmember']['customer_type']); } // ここまで追加 // お届け先情報を更新 $shippings = $data['shippings']; foreach ($shippings as $Shipping) { $deliveryTime = $Shipping->getDeliveryTime(); if (!empty($deliveryTime)) { $Shipping->setShippingDeliveryTime($deliveryTime->getDeliveryTime()); } } } 【app/template/novelty/Shopping/nonmember.twig】 // ... 既存のコード ... <ul class="border-dotted-top list-unstyled mb-0"> // ... 既存のコード ... <li class="border-dotted-bottom pr-3 py-4 py-lg-3"> <div class="row"> <div class="col-lg-3"> {{ form_label(form.customer_type, null, { 'label_attr':{ 'class':'mb-lg-0' } }) }} </div> <div class="col-lg-8"> {{ form_widget(form.customer_type) }} {{ form_errors(form.customer_type) }} </div> </li> </ul> 【app/template/novelty/Shopping/index.twig】 // ... 既存のコード ... <tr class="align-top"> <td class="text-nowrap"> <div class="mb-2"> 法人/個人 </div> </td> <td class="put-colon d-flex text-break"> <div class="d-flex align-items-center flex-fill mb-2"> {% if Order.customer_type == 1 %} 法人 {% elseif Order.customer_type == 2 %} 個人 {% else %} (未選択) {% endif %} </div> </td> </tr> [現象] ラジオボタンの設置はできましたが、次のお客様情報確認画面(/shopping)で(未選択)となります。データベースでは、dtb_orderテーブルのcustomer_typeカラムに0が登録されており、理想は「法人」を選択すると1、「個人」を選択すると2が登録されるようにしたいです。キャッシュをクリアしながら作業しましたが、実装できませんでした。 ------------------------------------------------------------------------------------------ ご確認の程よろしくお願いいたします。 |
h_tanaka |
投稿日時: 2025/7/2 15:57
対応状況: −−−
|
神 ![]() ![]() 登録日: 2016/7/22 居住地: 愛媛県 投稿: 2018 |
Re: 注文ページのお客様情報に「法人/個人」のラジオボタンを追加したい setFormData() は、ご注文内容確認で呼ばれます。
ゲスト購入ページの情報を保存するなら、 ShoppingController->nonmember() ですね。
|
doyuma |
投稿日時: 2025/7/2 16:34
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2025/6/25 居住地: 投稿: 3 |
Re: 注文ページのお客様情報に「法人/個人」のラジオボタンを追加したい トエビス株式会社
田中 宏典 様 ご返信ありがとうございます。 早速以下を試してみましたが、結果変わりませんでした。 【src/Eccube/Service/ShoppingService.php】 public function copyToOrderFromCustomer(Order $Order, Customer $Customer = null) { if (is_null($Customer)) { return $Order; } if ($Customer->getId()) { $Order->setCustomer($Customer); } $Order // ...既存のコード... ->setCustomerType($Customer->getCustomerType()); 【src/Eccube/Controller/ShoppingController.php】 /** * 非会員処理 */ public function nonmember(Application $app, Request $request) { // ...既存のコード... $Customer // ...既存のコード... ->setCustomerType($data['customer_type']); 【src/Eccube/Entity/Customer.php】 // ...既存のコード... /** * 顧客タイプ(1:法人, 2:個人) * * @var int */ private $customer_type; // ...既存のコード... /** * Get customer_type * * @return int */ public function getCustomerType() { return $this->customer_type; } /** * Set customer_type * * @param int $customer_type * @return Customer */ public function setCustomerType($customer_type) { $this->customer_type = (int)$customer_type; return $this; } 私の方で見当違いでしたら申し訳ありません。 どのファイルの内容を変更するか教えていただけると助かります。 よろしくお願いいたします。 |
h_tanaka |
投稿日時: 2025/7/2 16:52
対応状況: −−−
|
神 ![]() ![]() 登録日: 2016/7/22 居住地: 愛媛県 投稿: 2018 |
Re: 注文ページのお客様情報に「法人/個人」のラジオボタンを追加したい コードからは他におかしなところは読み取れませんでした。
$data や $Customer に正しく値が入っているか、デバッグしてみてください。
|
doyuma |
投稿日時: 2025/7/2 17:59
対応状況: 確認中
|
新米 ![]() ![]() 登録日: 2025/6/25 居住地: 投稿: 3 |
Re: 注文ページのお客様情報に「法人/個人」のラジオボタンを追加したい ご確認ありがとうございました。
AIにも確認したところ、 「PHP側(Orderエンティティ)には値が入っているので、DB保存時の問題が濃厚です。」 と回答がありました。 再度、 ・SSH接続でキャッシュクリア ・データベースの「dtb_order」テーブルに「customer_type」カラムとがあること ・「customer_type」の構造の確認 を行いましたが、変わりませんでした。 なにか分かりましたら、またご教授いただければ幸いです。 よろしくお願いいたします。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |