質問 > フロント機能 > 注文画面(配送先ごと)の項目追加 |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
Rights |
投稿日時: 2019/12/16 14:27
対応状況: −−−
|
一人前 登録日: 2019/3/12 居住地: 投稿: 99 |
注文画面(配送先ごと)の項目追加 [EC-CUBE]4.0.2
Shipping のEntityをカスタマイズしてフォームを拡張しようとしましたが、DBのカラム追加までで、注文画面や管理画面に追加したカラム(項目)が表示されません。 配送情報の取得でもうひと手間必要でしょうか? |
umebius |
投稿日時: 2019/12/16 16:44
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: 注文画面(配送先ごと)の項目追加 DBのカラム追加まで終わって入ればフォームの追加はあと少しだと思います。
様々な方法がありますのでぜひお試しください。 注文画面はコントローラやサービスクラスとの絡みで少し難しいところがあるので、管理画面からやった方が良いかもしれません。 FormAppendアノテーションを使った方法 https://doc4.ec-cube.net/customize_entity#entity-%E3%81%8B%E3%82%89%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E8%87%AA%E5%8B%95%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B FormExtensionを使った方法 https://doc4.ec-cube.net/customize_formtype
|
Rights |
投稿日時: 2019/12/17 22:19
対応状況: −−−
|
一人前 登録日: 2019/3/12 居住地: 投稿: 99 |
Re: 注文画面(配送先ごと)の項目追加 注文画面、受注管理画面、注文メールに項目を追加する事が出来ましたが、もう一点、会員登録の職業選択欄のようにセレクトボックスにした場合、職業マスタテーブルから値を参照していますが、FormAppendアノテーションで行う場合の指示について、symphonyの本家などをたどって探してみますが、セレクトボックスは表示されても、選択が表示されません。
namespace Customize\Entity; use Doctrine\ORM\Mapping as ORM; use Eccube\Annotation as Eccube; use Symfony\Component\Validator\Constraints as Assert; use Eccube\Form\Type\Master\SpecType; /** * @Eccube\EntityExtension("Eccube\Entity\Shipping") */ trait ShippingTrait { /** * @ORM\Column(name="spec_type", type="integer", options={"unsigned":true}, nullable=true) * @Eccube\FormAppend( * auto_render=true, * type="\Symfony\Component\Form\Extension\Core\Type\ChoiceType", * options={ * "required": false, * "label": "ランク" * }) * @Assert\NotBlank(message="入力されていません。") * @Assert\Choice(choices=SpecType::class, message="選択してください。") */ public $spec_type; ※マスターテーブルの作成、Entity Master、Form Type、Repository Masterに、職業マスタに倣ってそれぞれファイルを配置しています。 |
umebius |
投稿日時: 2019/12/17 22:34
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: 注文画面(配送先ごと)の項目追加 FormAppendのオプションでchoicesを指定しても出ないでしょうか?
* options={ * "required": false, * "label": "ランク", * "choices":{ * "ランク1" : "1", * "ランク2" : "2", * } * }, あと使い方にもよりますが、EntityType使ったほうが簡単かもしれないなと思いました。 |
Rights |
投稿日時: 2019/12/18 12:40
対応状況: −−−
|
一人前 登録日: 2019/3/12 居住地: 投稿: 99 |
Re: 注文画面(配送先ごと)の項目追加 EntityTypeを使う事でマスターテーブルから、選択肢の取得・表示ができました。
テンプレート側でEntityで拡張したフォームを出力するコードがありますが、表示が意図しない順番となりますが仕様でしょうか? (結局、追加項目をテンプレート側ではベタ書きにしております) namespace Customize\Entity; use Doctrine\ORM\Mapping as ORM; use Eccube\Annotation as Eccube; use Symfony\Component\Validator\Constraints as Assert; /** * @Eccube\EntityExtension("Eccube\Entity\Shipping") */ trait ShippingTrait { /** * @var \Eccube\Entity\Master\Spec * * @ORM\ManyToOne(targetEntity="Eccube\Entity\Master\Spec") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="spec_type", referencedColumnName="id") * }) * @Eccube\FormAppend( * auto_render=true, * type="\Eccube\Form\Type\Master\SpecType", * options={ * "required": false, * "label": "ランク" * }) * @Assert\NotBlank(message="入力されていません。") */ public $Spec; ※記載のコードは、項目が一つですが、この後テキストボックスの入力項目を2つ追加しています。 【テンプレート側】 ●変更前(既存テンプレートで自動生成するコードを利用 {% for f in form.Shippings[idx] if f.vars.eccube_form_options.auto_render %} {% if f.vars.eccube_form_options.form_theme %} {% form_theme f f.vars.eccube_form_options.form_theme %} {{ form_row(f) }} {% else %} <dl> <dt> {{ form_label(f) }} </dt> <dd> <div class="{{ f.vars.eccube_form_options.style_class }}{{ has_errors(f) ? ' error' }}"> {{ form_widget(f) }} {{ form_errors(f) }} </div> </dd> </dl> {% endif %} {% endfor %} → 実際の表示は、入力項目2(テキストボックス)、入力項目3(テキストボックス)、入力項目1(セレクトボックスボックス) ●変更後 <div class="ec-select"> <label>{{ 'ランク'|trans }}</label> {{ form_widget(form.Shippings[idx].Spec, {'attr': {'class': 'form-control'}}) }} {{ form_errors(form.Shippings[idx].Spec) }} </div> <div class="ec-input"> <label>{{ 'テキスト入力1'|trans }}</label> {{ form_widget(form.Shippings[idx].text1, {'attr': {'class': 'form-control'}}) }} {{ form_errors(form.Shippings[idx].text1) }} </div> <div class="ec-input"> <label>{{ 'テキスト入力2'|trans }}</label> {{ form_widget(form.Shippings[idx].text2, {'attr': {'class': 'form-control'}}) }} {{ form_errors(form.Shippings[idx].text2) }} </div> → ベタ書き |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |