バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

 > プラグイン > 新規会員登録フォームへプラグインで項目を追加

プラグイン

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
topo
投稿日時: 2017/1/6 1:10
対応状況: −−−
常連
登録日: 2008/6/11
居住地: 岡山
投稿: 64
新規会員登録フォームへプラグインで項目を追加
ECcube3.0.12にて、新規会員登録に項目をプラグインで追加する場合の手順についてヒント頂けないでしょうか?

----------
■やりたい事
新規会員登録に項目を追加。
確認画面にも表示され、データを登録したい。

----------
■懸念点
以下、類似の質問があがっていたのですがそもそもプラグインでやらずとも以下のような手順を踏んでも良い物でしょうか?
まだ触り始めたばかりで感覚がつかめませんが今後のバージョンアップなどで影響が出たりしないかがちょっと心配でした。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=18387&forum=5

----------
■やってみた事

1)追加したプラグインの「event.yml」にて以下のような定義を作り対応しようと思っています

front.entry.index.initialize:
- [onFrontEntryIndexInit, NORMAL] # ここで入力欄を追加
Entry/confirm.twig:
- [onRenderEntryConfirm, NORMAL] # 確認画面に入力された値を出す
front.entry.index.complete:
- [onFrontEntryIndexComplete, NORMAL] # 完了処理にて追加項目のデータも登録

「/src/eccube/resource/template/default/entry/」の中にある「index.twig」を見ると

{% if f.vars.name matches '[^plg*]' %}

のようなロジックがかかれてありプラグインから出力できそうに見えたのですが
「confirm.twig」には存在しないようなので自分でロジックで書く必要がある?と思っています。

----------
2)「onFrontEntryIndexInit」にて以下のように記述して入力欄は出るようになりました
  ただ確認画面に行って戻ってきた時に値が保持されず「?」が飛んでいます・・・
  「初期値を設定」のあたりがイマイチわかってないような気がしています。
  「src/eccube/controller/entrycontroller.php」の「request」に入力値が入っている?
  
// 項目の追加
$builder->add(
self::ADD_TEXT_NAME,
'text',
array(
'required' => false,
'label' => '追加項目',
'mapped' => false,
'attr' => array(
'placeholder' => '追加項目を入力してください',
),
)
);

// 初期値を設定
$builder->get(self::ADD_TEXT_NAME)->setData( 【ここで入力値をセット?】 );

----------
3)確認画面に行こうとすると入力画面に戻ってきてしまう

「src/eccube/controller/entrycontroller.php」の以下のロジックでNGになり
確認画面へ進む処理がうまくいっていない?

if ($form->isSubmitted() && $form->isValid()) {

----------

上記のような内容でヒントを頂ければ幸いです。
「懸念点」のようなやり方をしても別に構わない、などもあればご教授頂ければと思います。
よろしくお願い致しますm(_ _)m

468
投稿日時: 2017/1/6 9:44
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 新規会員登録フォームへプラグインで項目を追加
2)の確認画面から入力画面に戻る際ですが、
リクエストのPOSTに追加された項目の値はセットされていますか?
セットされていれば、EntryController.php.index()の
$form = $builder->getForm();

$form->handleRequest($request);

この辺の処理でformに値がセットされて入力値が保持されると思います。
POSTに値がセットされていないようであれば、config.twigの記述に何か足りないところがあるのではないかと思います。

3)はまず、$form->isSubmitted()と$form->isValid()のどちらがfalseなのか調べていく必要があるように思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

topo
投稿日時: 2017/1/12 10:15
対応状況: −−−
常連
登録日: 2008/6/11
居住地: 岡山
投稿: 64
Re: 新規会員登録フォームへプラグインで項目を追加
とりあえず頂いたヒントから解決できました。ありがとうございました。

1)入力画面に項目追加


・event.yml
front.entry.index.initialize:
    - [onFrontEntryIndexInit, NORMAL]

・[追加するプラグイン]Event.php

    public function onFrontEntryIndexInit(EventArgs $event)
    {
        // フォームの追加
        /** @var FormInterface $builder */
        // FormBuildeの取得
        $builder = $event->getArgument('builder');
        // 項目の追加
        $builder->add(
            self::ADD_TEXT_NAME,
            'text',
            array(
                'required' => false,
                'label' => '追加項目',
                'mapped' => false,
                'attr' => array(
                    'placeholder' => '追加項目を入力してください',
                ),
            )
        );
    } 


2)確認画面に項目追加


・event.yml
Entry/confirm.twig:
    - [onRenderEntryConfirm, NORMAL]

・[追加するプラグイン]Event.php

    public function onRenderEntryConfirm(TemplateEvent $event)
    {

        $wk_name = self::ADD_TEXT_NAME ;

        // twigコードにカテゴリコンテンツを挿入
        // $event->getSourceでtwigのコードが取れる
$snipet = <<< EOF
                    <div class="dl_table not_required">
                        <dl id="confirm_box__{$wk_name}">
                            <dt>{{ form_label(form.{$wk_name}) }}</dt>
                            <dd>
                                <div class="form-group form-inline">
                                    {{ form_widget(form.{$wk_name}) }}
                                </div>
                            </dd>
                        </dl>
                    </div>
EOF;

        $search = '<div id="confirm_box__footer"';
        $replace = $snipet.$search;
        $source = str_replace($search, $replace, $event->getSource());
        $event->setSource($source);
    }



スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,291名です
総投稿数は109,690件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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