バージョン選択

フォーラム

メニュー

オンライン状況

104 人のユーザが現在オンラインです。 (82 人のユーザが フォーラム を参照しています。)
登録ユーザ: 2
ゲスト: 102
dyn30389 dl2008 もっと...

サイト内検索

その他 > その他 > 注文手続き画面に項目追加したい

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
eccbeginer
投稿日時: 2019/7/26 12:36
対応状況: −−−
新米
登録日: 2019/5/14
居住地:
投稿: 9
注文手続き画面に項目追加したい
お世話になります。

▼テンプレート
[EC-CUBE]4.0.2
[レンタルサーバ]AWS EC2
[OS]Amazon Linux AMI、release 2018.03
[PHP]7.1.28
[データベース]MySQL、5.6.43
[WEBサーバ]Apache、2.4.39(Amazon)
[ブラウザ]Chrom、74.0.3729.131
[導入プラグインの有無]無
[カスタマイズの有無]無
[現象]
ご注文手続き画面に「領収書宛名」という項目を追加し、納品書へ印字できるようにしたく
dtb_orderの項目として登録できれば、実現できると考えました。
エンティティのカスタマイズページ(http://doc4.ec-cube.net/customize_entity)を参考に作業を行い、Orderエンティティに項目を追加しましたが、
注文手続き画面からの登録情報がデータベースのdtb_orderに追加した項目へ登録されない状況になっております。

現状について
・dtb_orderへの項目追加はできております。
・管理画面の受注登録画面へはautoレンダリングにより項目追加されており、
dtb_orderへ追加した項目への更新もできております。
・ご注文手続き画面へはShopping\index.twigへ追記し、項目追加できておりますが、
 その項目へ入力してもdtb_orderに追加した項目へ更新されません。

おそらく、修正する必要があるファイルが漏れていると思うのですが、
見当がつかない状況です。
恐れ入りますが、追加で修正すべきファイルなどアドバイスいただけないでしょうか。

どうぞよろしくお願いいたします。
h_tanaka
投稿日時: 2019/7/26 12:41
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 924
Re: 注文手続き画面に項目追加したい
FormType はどのように定義されていますか?


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

eccbeginer
投稿日時: 2019/7/26 13:53
対応状況: −−−
新米
登録日: 2019/5/14
居住地:
投稿: 9
Re: 注文手続き画面に項目追加したい
田中様

早速のご返信をありがとうございます。

Eccube\Form\Type\Shopping\ShoppingType.phpは
以下のように定義しております。
「←追記」の部分が追記箇所(計7か所)となります。

namespace Eccube\Form\Type;

use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;    ← 追記
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints as Assert;

class ShoppingType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$payments = $options['payments'];
$payment = $options['payment'];
$message = $options['message'];
$receipt_address = $options['receipt_address'];    ←追記

$builder
->add('payment', EntityType::class, [
'class' => 'Eccube\Entity\Payment',
'choice_label' => 'method',
'choices' => $payments,
'data' => $payment,
'expanded' => true,
'constraints' => [
new Assert\NotBlank(),
],
])

      ->add('message', TextareaType::class, [
'required' => false,
'data' => $message,
'constraints' => [
new Assert\Length(['min' => 0, 'max' => 3000]),
],
])

->add('receipt_address', TextType::class, [    ←追記
'required' => false,              ←追記
'data' => $receipt_address           ←追記
]);                        ←追記
}
  public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'payments' => [],
'payment' => null,
'message' => null,
'receipt_address' => null             ←追記
]);
}

/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'shopping';
}
}

どうぞよろしくお願い致します。
h_tanaka
投稿日時: 2019/7/26 17:31
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 924
Re: 注文手続き画面に項目追加したい
通常は、Entity, Form, twig で定義してやれば保存までもできるはずです。
プラグインの中身は見ていないのですが、Controller や Repository でなにか特殊な保存処理は行っていないでしょうか?


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

eccbeginer
投稿日時: 2019/7/26 18:27
対応状況: −−−
新米
登録日: 2019/5/14
居住地:
投稿: 9
Re: 注文手続き画面に項目追加したい
田中様

ご回答を頂戴し、ありがとうございます。

Controller や Repositoryは特に何も更新しておりません。

\Customize\EntityにOrderTrait.phpを作成し、
bin/console eccube:generate:proxies コマンドで Proxy クラスを生成し、Entityの拡張を行っており、プラグインの作成を行っていないのですが、画面項目追加のやり方としてそもそも合っておりますでしょうか?

また、OrderTrait.phpの内容は以下の内容としております。
お気づきの点などございましたら、ご教示お願いいたします。

namespace Customize\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;

/**
* @EntityExtension("Eccube\Entity\Order")
*/
trait OrderTrait
{
/**
* @ORM\Column(type="string",nullable=true)
* @Eccube\Annotation\FormAppend(
* auto_render=true,
* type="\Symfony\Component\Form\Extension\Core\Type\TextType",
* options={
* "required": false,
* "label": "領収書宛名"
* })
*/
public $receipt_address;

/**
* @ORM\Column(type="string",nullable=true)
* @Eccube\Annotation\FormAppend(
* auto_render=false,
* type="\Symfony\Component\Form\Extension\Core\Type\TextType",
* options={
* "required": false,
* "label": "領収書但し書き"
* })
*/
public $receipt_proviso;

}


どうぞよろしくお願いいたします。

h_tanaka
投稿日時: 2019/7/29 21:42
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 924
Re: 注文手続き画面に項目追加したい
うーん。。
問題ないように見受けられます。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

eccbeginer
投稿日時: 2019/8/4 6:34
対応状況: −−−
新米
登録日: 2019/5/14
居住地:
投稿: 9
Re: 注文手続き画面に項目追加したい
田中様

お世話になっております。

引続き調査していましたところ
ご注文手続き画面から確認画面へ遷移するタイミングでは
仮確定段階の受注データとしてDBに値がセットされていました。以下のSQLでreceipt_addressが更新されていました。
UPDATE dtb_order SET order_no = '58', message = 'テスト問合せ', subtotal = '64800', discount = '0', delivery_fee_total = '0', charge = '0', tax = '4800', total = '64800', payment_total = '64800', add_point = '600', use_point = '0', receipt_address = 'テスト宛名', receipt_proviso = 'テス ト但し書き', update_date = '2019-08-03 21:18:00' WHERE id = 58

しかし、この後、注文確認画面から注文完了画面に遷移する際に再度、dtb_orderが更新される際にNULL値で上書きされていました。
UPDATE dtb_order SET subtotal = '64800', discount = '0', delivery_fee_total = '0', charge = '0', tax = '4800', total = '64800', payment_total = '64800', add_point = '600', receipt_address = NULL, receipt_proviso = NULL, update_date = '2019-08-03 21:20:51' WHERE id = 58

このUPDATE文に今回追加した項目を対象として含めるようなコードは追記していないのですが、自動的に追加されてしまっているようです。
確認したところ、EntityおよびShopping\index.twigに追加したことでこのUPDATE文に追加されるようです。

上記UPDATE文でNULL値ではなく、値を設定する方法、
または上記UPDATE文の対象から該当項目を除外する方法は
ございませんでしょうか。

どうぞよろしくお願いいたします。
ゲスト
投稿日時: 2019/9/16 20:56
対応状況: −−−
Re: 注文手続き画面に項目追加したい
aposto
投稿日時: 2019/9/25 1:44
対応状況: −−−
新米
登録日: 2019/9/11
居住地:
投稿: 2
Re: 注文手続き画面に項目追加したい
私もこの現象を再現することが出来ました。

ShoppingController.php内の以下のコード部分でnullが入るようです。

-------------------------------------------
/**
* 注文処理を行う.
*
* 決済プラグインによる決済処理および注文の確定処理を行います.
*
* @Route("/shopping/checkout", name="shopping_checkout", methods={"POST"})
* @Template("Shopping/confirm.twig")
*/
public function checkout(Request $request)
{
// ログイン状態のチェック.
if ($this->orderHelper->isLoginRequired()) {
log_info('[注文処理] 未ログインもしくはRememberMeログインのため, ログイン画面に遷移します.');

return $this->redirectToRoute('shopping_login');
}

// 受注の存在チェック
$preOrderId = $this->cartService->getPreOrderId();
$Order = $this->orderHelper->getPurchaseProcessingOrder($preOrderId);
if (!$Order) {
log_info('[注文処理] 購入処理中の受注が存在しません.', [$preOrderId]);

return $this->redirectToRoute('shopping_error');
}


// フォームの生成.
$form = $this->createForm(OrderType::class, $Order, [
// 確認画面から注文処理へ遷移する場合は, Orderエンティティで値を引き回すためフォーム項目の定義をスキップする.
'skip_add_form' => true,
]);
var_dump($form->getViewData()); //☆この部分ではnullはなし
$form->handleRequest($request);
var_dump($form->getViewData());exit; //☆この部分でnullが代入される

-------------------------------------------


解決方法等はまだわかっていません。
PDanny
投稿日時: 2019/10/11 23:59
対応状況: −−−
新米
登録日: 2019/10/11
居住地:
投稿: 1
Re: 注文手続き画面に項目追加したい
Today was not my lucky day, but I must say this article has reignited my ecstasy. Dissertation writing services. I am very pleased for finding this blog. Thank you for the information.Cheap dissertation writing service
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

ec-cube.co

統計情報

総メンバー数は51,015名です
総投稿数は93,519件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
1984
4
468
1860
5
yuh
1604
6
red
1353
7
umebius
1296
8
h_tanaka
924
9
fukap
907
10
tsuji
856
11
shutta
835
12 ramrun 789
13
tao_s
774
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.