バージョン選択

フォーラム

メニュー

オンライン状況

42 人のユーザが現在オンラインです。 (23 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 41
Runvast もっと...

サイト内検索

質問 > フロント機能 > 注文画面(配送先ごと)の項目追加

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Rights
投稿日時: 2019/12/16 14:27
対応状況: −−−
常連
登録日: 2019/3/12
居住地:
投稿: 52
注文画面(配送先ごと)の項目追加
[EC-CUBE]4.0.2

Shipping のEntityをカスタマイズしてフォームを拡張しようとしましたが、DBのカラム追加までで、注文画面や管理画面に追加したカラム(項目)が表示されません。
配送情報の取得でもうひと手間必要でしょうか?
umebius
投稿日時: 2019/12/16 16:44
対応状況: −−−
登録日: 2016/7/22
居住地: 東京日本橋
投稿: 1753
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


----------------
EC-CUBE4系 カスタマイズ ECのプロがシステム特急案件承ります。
EC-CUBE開発 リモートで働くエンジニア募集中

Rights
投稿日時: 2019/12/17 22:19
対応状況: −−−
常連
登録日: 2019/3/12
居住地:
投稿: 52
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
居住地: 東京日本橋
投稿: 1753
Re: 注文画面(配送先ごと)の項目追加
FormAppendのオプションでchoicesを指定しても出ないでしょうか?

* options={
* "required": false,
* "label": "ランク",
* "choices":{
* "ランク1" : "1",
* "ランク2" : "2",
* }
* },


あと使い方にもよりますが、EntityType使ったほうが簡単かもしれないなと思いました。
Rights
投稿日時: 2019/12/18 12:40
対応状況: −−−
常連
登録日: 2019/3/12
居住地:
投稿: 52
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>
→ ベタ書き
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は66,645名です
総投稿数は98,379件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2651
4
nanasess
2103
5
umebius
1753
6
yuh
1612
7
red
1424
8
h_tanaka
1044
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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