バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 会員の住所に国を追加したい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2018/2/19 12:05
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1635
会員の住所に国を追加したい
EC-CUBE3.0.15

こちらのスレッドを参考に、会員情報に国項目を追加しました。
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=19334&forum=19

表示とDB保存はうまくいったのですが、DBに保存した情報を表示する方法がわかりません。
どうすれば表示されるようになるでしょうか?

フォームの 'data' に対してDB情報を設定すればよさそうですが、DB情報の取得方法がわからないでいます。

src/Eccube/ServiceProvider/EccubeServiceProvider.php
            $types[] = new \Eccube\Form\Type\Master\CountryType($app['orm.em']);  // 国


src/Eccube/Form/Type/Master/CountryType.php
namespace Eccube\Form\Type\Master;

use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class CountryType extends AbstractType
{
    public function __construct(\Doctrine\ORM\EntityManager $em) {
        $this->em = $em;
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'label' => '国',
            'class' => 'Eccube\Entity\Master\Country',
            'data' => $this->em->getReference("Eccube\Entity\Master\Country", 392), // 初期値は日本 →★ これをコメントアウトすればDB情報が反映される
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return 'eccube_country';
    }

    /**
     * {@inheritdoc}
     */
    public function getParent()
    {
        return 'master';
    }
}


src/Eccube/Form/Type/Front/EntryType.php
class EntryType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('country', 'eccube_country', array(
                'required' => false,
            ));
    }
}


app/template/default/Mypage/change.twig
                    <dl id="detail_box__address_detail">
                        <dt>{{ form_label(form.address) }}</dt>
                        <dd>
                            <div id="detail_box__country" class="form-group form-inline {% if form.country.vars.errors is not empty %}has-error{% endif %}">{{ form_widget(form.country) }}</div> {# ★ 追加 ★ #}
                            <div id="detail_box__zip" class="form-group form-inline input_zip {% if form.zip.zip01.vars.errors is not empty or form.zip.zip02.vars.errors is not empty %}has-error{% endif %}">{{ form_widget(form.zip) }}</div>
                            <div id="detail_box__address" class="{% if form.address.pref.vars.errors is not empty or form.address.addr01.vars.errors is not empty or form.address.addr02.vars.errors is not empty %}has-error{% endif %}">
                                {{ form_widget(form.address) }}
                                {{ form_errors(form.address) }}
                            </div>
                        </dd>
                    </dl>


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

h_tanaka
投稿日時: 2018/2/19 12:28
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1635
Re: 会員の住所に国を追加したい
一応、自己解決しました。

コントローラー側でフォームの値を上書きすることでうまくいきました。
ただ、この方法だと国フォームが必要なすべてのページでこの処理を追加しないといけないため、できれば CountryType 内でDB情報の設定をしたいです。
やり方をご存じの方がいらっしゃればお教え願います。

src/Eccube/Controller/Mypage/ChangeController.php
        $Country = $Customer->getCountry();
        if ($Country) {
            $builder->get('country')->setData($Country);
        }


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

h_tanaka
投稿日時: 2018/2/19 17:58
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1635
Re: 会員の住所に国を追加したい
管理画面の受注詳細ページでの実装方法がわからないです。

以下のような実装で、注文者情報の国はDB情報がうまく反映されたのですが、お届け先情報にDB情報がうまく反映されません。
collection のフォームタイプに対して表示情報を設定するにはどうすればよでしょうか?

src/Eccube/Controller/Admin/Order/EditController.php

        $Country = $TargetOrder->getCountry();
        if ($Country) {
            $builder->get('country')->setData($Country); // ★これはうまく反映された
        }

        foreach ($TargetOrder->getShippings() as $tmpOriginalShipping) {
            $formData = $builder->getData();
            // $Shippings = array();
            foreach ($formData['Shippings'] as $Shipping) {
                if ($tmpOriginalShipping->getId() == $Shipping->getId()) {
                    $Country = $tmpOriginalShipping->getCountry();
                    if ($Country) {
                        $Shipping->setCountry($Country); // ★これは反映されない
                    }
                }
                // $Shippings[] = $Shipping;
            }
            // $builder->get('Shippings')->setData($Shippings);
        }


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

h_tanaka
投稿日時: 2018/2/19 19:52
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1635
Re: 会員の住所に国を追加したい
自己解決しました。

FormType の POST_SET_DATA のタイミングでDB情報を設定することができました。

src/Eccube/Controller/Admin/Order/EditController.php
        $Country = $TargetOrder->getCountry();
        if ($Country) {
            $builder->get('country')->setData($Country);
        }


src/Eccube/Form/Type/Admin/ShippingType.php
            ->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
                /** @var \Eccube\Entity\Shipping $data */
                $data = $event->getData();

                $form->add('country', 'eccube_country', array(
                    'required' => false,
                    'data' => $data->getCountry(),
                ));

            })


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

h_tanaka
投稿日時: 2018/2/19 19:56
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1635
Re: 会員の住所に国を追加したい
あとは、フロントのお問い合わせページを表示したときに国を設定する方法がわかりません。
ログインしたときに $app['user'] に設定していると思われるのですが、どこで設定しているのでしょうか?


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

h_tanaka
投稿日時: 2018/2/19 21:05
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1635
Re: 会員の住所に国を追加したい
自己解決しました。

お問い合わせのコントローラーで他の項目と同じように設定しようとしたのですがなぜだかうまくいかず、別の方法でFormに値を設定するとうまくいきました。

src/Eccube/Controller/ContactController.php

        $builder = $app['form.factory']->createBuilder('contact');

        if ($app->isGranted('ROLE_USER')) {
            $user = $app['user'];
            $builder->setData(
                array(
                    'name01' => $user->getName01(),
                    'name02' => $user->getName02(),
                    'kana01' => $user->getKana01(),
                    'kana02' => $user->getKana02(),
                    // 'country' => $user->getCountry(), // ★ これではうまいかない
                    'zip01' => $user->getZip01(),
                    'zip02' => $user->getZip02(),
                    'pref' => $user->getPref(),
                    'addr01' => $user->getAddr01(),
                    'addr02' => $user->getAddr02(),
                    'tel01' => $user->getTel01(),
                    'tel02' => $user->getTel02(),
                    'tel03' => $user->getTel03(),
                    'email' => $user->getEmail(),
                )
            );

            $Country = $user->getCountry();
            if ($Country) {
                $builder->get('country')->setData($Country); // ★ これでうまくいった
            }
        }


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

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


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2311
5
umebius
2085
6
yuh
1819
7
h_tanaka
1635
8
red
1569
9
mcontact
1265
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.