バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > その他 > ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
sogatat
投稿日時: 2024/4/15 0:29
対応状況: −−−
半人前
登録日: 2024/4/14
居住地:
投稿: 20
ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい
[システム情報]


EC-CUBE
4.2.3
サーバーOS
Linux djungy 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64
DBサーバー
SQLite version 3.40.1
WEBサーバー
symfony-cli/5.8.14
PHP
7.4.33 (Core, date, libxml, openssl, pcre, sqlite3, zlib, 
bcmath, bz2, ctype, curl, dom, hash, fileinfo, filter, ftp, 
gd, SPL, iconv, intl, json, mbstring, session, standard, 
pcntl, mysqlnd, PDO, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, 
Phar, posix, readline, Reflection, mysqli, shmop, SimpleXML, 
soap, sockets, exif, sysvsem, sysvshm, tidy, tokenizer, xml, 
xmlreader, xmlrpc, xmlwriter, xsl, zip, cgi-fcgi, Zend 
OPcache, xdebug)
User Agent
Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0


ゲスト購入時にご注文手続き画面のお届け日とお届け時間と
同じ見た目の出発日と出発時間を追加したいと思っています。

最近eccubeの勉強をはじめまして、普通のテキストフィールドで
あればShippingエンティティにフィールドを定義し、DBに反映し、
テンプレートに記載することでDBにカスタムフィールドを保存でき
るようになったところです。

shipping_delivery_date, shipping_delivery_timeを参考に、
出発日、出発時間用の新規フィールドdeparture_date,
departure_timeをDB上のフィールド作るところまではできそう
なのですが、テンプレート側ではお届け時間はDeliveryTimeという
エンティティになっていますが、DBからこのエンティティへの
繋がりが理解しかねています。

以下のようなコードになっています。
app/template/default/Shopping/index.twig

                                <div class="ec-select ec-select__time">
                                    <label>{{ 'front.shopping.delivery_time'|trans }}</label>
                                    {{ form_widget(form.Shippings[idx].DeliveryTime, {'attr': {'class': 'form-control'}}) }}
                                    {{ form_errors(form.Shippings[idx].DeliveryTime) }}
                                </div>


これをお届け日としてコピーしてフォームに追加したいのですが、
そもそもDeliveryTimeエンティティがどこで読み込まれてtwigテン
プレート上で使用されているのか理解できません。

「お届け時間」を表すDeliveryTimeエンティティは、追加したい
「出発時間」にも流用できるのでしょうか。

また別の問題になるのですが、コードをコピーして「出発日」と
「出発時間」をフォームに追加しようとしているのですが、そもそ
も出発時間はセレクトボックスにすらならない状態です。

どのあたりのコードを参考にすれば実装できるか、アドバイスなど
いただけないでしょうか。

よろしくお願いいたします。
h_tanaka
投稿日時: 2024/4/15 9:36
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1681
Re: ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい
form.Shippings[idx].DeliveryTime
という form の定義なので、まずは Shippings フォームが定義されている場所を grep検索して確認します。

src/Eccube/Form/Type/Shopping/OrderType.php

        ])->add('Shippings', CollectionType::class, [
            'entry_type' => ShippingType::class,
            'by_reference' => false,


次に ShippingType を確認します。
ここで DeliveryTime が定義されています。
src/Eccube/Form/Type/Shopping/ShippingType.php

                $form->add(
                    'DeliveryTime',
                    EntityType::class,
                    [
                        'label' => 'front.shopping.delivery_time',
                        'class' => 'Eccube\Entity\DeliveryTime',
                        'choice_label' => 'deliveryTime',
                        'choices' => $DeliveryTimes,
                        'required' => false,
                        'placeholder' => 'common.select__unspecified',
                        'mapped' => false,
                        'data' => $ShippingDeliveryTime,
                    ]
                );


ここで Entity クラスを読んでいることが確認できます。
src/Eccube/Entity/DeliveryTime.php

このあたりを参考に Entity を新規作成して、 ShippingType に定義すればプルダウンが作れると思います。


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

sogatat
投稿日時: 2024/4/15 11:07
対応状況: −−−
半人前
登録日: 2024/4/14
居住地:
投稿: 20
Re: ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい
h_tanaka様

ご返信いただきましてありがとうございます。
紐付いている部分を教えていただき全体像が見えてまいりました。

> このあたりを参考に Entity を新規作成して、 ShippingType に定義すればプルダウンが作れると思います。

この部分を見て、もしかしたらセレクトボックスの値が決め打ちでいい場合は、テーブルを新規に作ったりしなくてもchoicesあたりを変更できたらいけそうな気がしてきました。
h_tanaka
投稿日時: 2024/4/15 11:18
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1681
Re: ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい
そうですね、固定値で実装するのもありですが、受注メールや受注登録ページへの実装を考えると Entity を作成したほうが後々の拡張がしやすいです。


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

sogatat
投稿日時: 2024/4/15 11:53
対応状況: −−−
半人前
登録日: 2024/4/14
居住地:
投稿: 20
Re: ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい
何度も教えていただいてありがとうございます。

そうなると今後のアプローチとしては、まずは追加したい項目が出発日と出発時間のセットになるので、お届け日お届け時間を参考にDBに以下のフィールドを新たに追加します。

app/Customize/Entity/ShippingTrait.phpを作成して以下を追加
````
shipping.departure_date
shipping.departure_time
```

src/Eccube/Entity/DeliveryTime.phpを参考に、DepartureTimeエンティティを作成する。

上位のDepartureエンティティも作成する??

これらをsrc/Eccube/Form/Type/Shopping/ShippingType.phpでフォームに組み込む。

とこういった流れがオススメしていただいている内容だと思っています。
h_tanaka
投稿日時: 2024/4/15 12:05
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1681
Re: ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい
はい、おおよそ問題ないかと思います。


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

sogatat
投稿日時: 2024/4/15 14:25
対応状況: −−−
半人前
登録日: 2024/4/14
居住地:
投稿: 20
Re: ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい
何度もありがとうございます。Entity追加を検討したのですがテーブルも追加が必要そうで、Entityも親子関係が必要そうでなかなかに時間がかかりそうに思っています。

そこで一旦、エンティティを使わないで、固定値にしてお客様に見せる方向で今週は進めたいと思っています。

そこで再度申し訳ないのですが、以下についてアドバイスいたあけないでしょうか。

やろうとしていること:
問題の切り分けのために「出発時間」のみフォームに追加してみる。これはエントリーを使わず固定値にする(0-23)。

出発時間(text)のフィールドをshippingテーブルに追加するEntity
app/Customize/Entity/ShippingTrait.php

<?php

namespace Customize\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;
use Eccube\Entity\Shipping;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @EntityExtension("Eccube\Entity\Shipping")
 */
trait ShippingTrait
{
    /**
     * @var string|null
     * @ORM\Column(name="departure_time", type="string", length=255, nullable=true)
     * @Eccube\Annotation\FormAppend(
     *     auto_render=false,
     *     type="\Symfony\Component\Form\Extension\Core\Type\TextType",
     *     options={
     *          "required": true,
     *          "label": "出発時刻",
     *          "attr": {"placeholder": "例:10"}
     *     })
     * @Assert\NotBlank(message="入力されていません。")
     */
    private $shipping_departure_time;

    /**
     * Set shippingDepartureTime.
     *
     * @param string|null $shippingDepartureTime
     *
     * @return Shipping
     */
    public function setShippingDepartureTime($shippingDepartureTime = null)
    {
        $this->shipping_departure_time = $shippingDepartureTime;

        return $this;
    }

    /**
     * Get shippingDepartureTime.
     *
     * @return string|null
     */
    public function getShippingDepartureTime()
    {
        return $this->shipping_departure_time;
    }
}
```

フォームタイプ拡張用のコード
app/Customize/Form/Extension/OrderAddDepartureTimeExtension.php
[code]
<?php

namespace Customize\Form\Extension;

use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Eccube\Form\Type\Front\EntryType;
use Eccube\Entity\Shipping;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;

class OrderAddDepartureTimeExtension extends AbstractTypeExtension
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->addEventListener(
            FormEvents::PRE_SET_DATA,
            function (FormEvent $event) {
                $form = $event->getForm();
                $form->add(
                    'shipping_departure_time',
                    ChoiceType::class,
                    [
                        'choices' => array_combine(range(1,20), range(1,20)),
                        'required' => false,
                        'placeholder' => 'common.select__unspecified',
                        'mapped' => false,
                        'data' => '0',
                    ]
                );
            }
        );
    }

    /**
     * {@inheritdoc}
     */
    public function getExtendedType()
    {
        return Shipping::class;
    }

    /**
     * {@inheritdoc}
     */
    public static function getExtendedTypes(): iterable
    {
        yield Shipping::class;
    }
}


お届け日、お届け時間の下に出発時間を追加
app/template/default/Shopping/index.twig

                            <div class="ec-selects">
                                <div class="ec-select ec-select__time">
                                    <label>{{ 'front.shopping.delivery_time'|trans }}</label>
                                    {{ form_widget(form.Shippings[idx].shipping_departure_time, {'attr': {'class': 'form-control'}}) }}
                                    {{ form_errors(form.Shippings[idx].shipping_departure_time) }}
                                </div>
                            </div>


しかしこの場合、フォームにはセレクトボックスが表示されず、テキスト入力になってしまいます。

'placeholder' => 'common.select__unspecified',

は効いていないようですが、どこがおかしいそうかアドバイスいただけないでしょうか。
h_tanaka
投稿日時: 2024/4/15 14:30
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1681
Re: ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい
ChoiceType のパラメーターに次の指定が必要です。

    'multiple' => false,
    'expanded' => false,


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

sogatat
投稿日時: 2024/4/15 14:50
対応状況: −−−
半人前
登録日: 2024/4/14
居住地:
投稿: 20
Re: ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい
追加してみたのですが、セレクトボックスにはならないようです。


                    ChoiceType::class,
                    [
                        'choices' => array_combine(range(1,20), range(1,20)),
                        'required' => false,
                        'placeholder' => 'common.select__unspecified',
                        'mapped' => false,
                        'multiple' => false,
                        'expanded' => false,
                        'data' => '0',
                    ]
h_tanaka
投稿日時: 2024/4/15 14:59
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1681
Re: ご注文手続き画面のお届け日とお届け時間と同じ見た目の出発日と出発時間を追加したい
うーん、他におかしなところはなさそうに見えますが、、

<label> タグを1つ上の階層に移してみてもらえますか。


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

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


 



ログイン


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

統計情報

総メンバー数は90,090名です
総投稿数は110,310件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1681
8
red
1571
9
mcontact
1350
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.