プラグイン > その他 > お問い合わせフォーム追加 |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
tkm12121 |
投稿日時: 2020/4/28 17:18
対応状況: 確認中
|
半人前 登録日: 2020/3/19 居住地: 投稿: 13 |
お問い合わせフォーム追加 お問い合わせフォームを複製して作成を致しましたが、元々ある「お問い合わせフォーム」の確認ページへ移行できない状況です。
「新しく追加したフォーム」は確認・完了まで表示されます。 【src >> Eccube >> Form >> Type >> Front >>ContactType.php】にコード追加と 【src >>Eccube >>Form >>Type >>ChoiceType.php】を追加したところ、確認ページへ移行できなくなってしまいます。両方を削除すると元に戻ります。 恐れ入りますが、よろしくお願いいたします。 ――――――――――――――――― 【ContactType.php追加内容】 use Symfony\Component\Form\Extension\Core\Type\ChoiceType; ・ ・ ・ ・ $Selection = ['見積依頼' => '見積依頼','価格に関して' => '価格に関して','商品に関して' => '商品に関して','その他' => 'その他']; $builder ->add('how', ChoiceType::class, [ 'required' => true, 'choices' => $Selection, 'multiple' => false, 'expanded' => false, 'mapped' => true, 'placeholder' => '選択してください ▼', 'constraints' => [ new Assert\NotBlank(), ], ]) ――――――――――――――――― [src >>Eccube >>Form >>Type >>ChoiceType.php]へ追加 <?php /* * This file is part of EC-CUBE * * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved. * * http://www.ec-cube.co.jp/ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Eccube\Form\Type; use Eccube\Common\EccubeConfig; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Validator\Constraints as Assert; class ChoiceType extends AbstractType { /** * @var EccubeConfig */ protected $eccubeConfig; /** * ChoiceType constructor. * * @param EccubeConfig $eccubeConfig */ public function __construct( EccubeConfig $eccubeConfig ) { $this->eccubeConfig = $eccubeConfig; } /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $options['how_options']['required'] = $options['required']; // required の場合は NotBlank も追加する if ($options['required']) { $options['how_options']['constraints'] = array_merge([ new Assert\NotBlank(), ], $options['how_options']['constraints']); } if (!isset($options['options']['error_bubbling'])) { $options['options']['error_bubbling'] = $options['error_bubbling']; } if (empty($options['how'])) { $options['how'] = $builder->getHow(); } $builder ->add($options['how'], TextType::class, array_merge_recursive($options['options'], $options['how_options'])) ; $builder->setAttribute('how', $options['how']); $builder->setAttribute('how', $options['how']); } /** * {@inheritdoc} */ public function buildView(FormView $view, FormInterface $form, array $options) { $builder = $form->getConfig(); $view->vars['how'] = $builder->getAttribute('how'); } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'options' => [], 'how_options' => [ 'attr' => [ 'placeholder' => 'common.how', ], 'constraints' => [ new Assert\Length([ 'max' => $this->eccubeConfig['eccube_name_len'], ]), new Assert\Regex([ 'pattern' => '/^[^\s ]+$/u', 'message' => 'form_error.not_contain_spaces', ]), ], ], 'how' => '', 'error_bubbling' => false, 'inherit_data' => true, 'trim' => true, ]); } /** * {@inheritdoc} */ public function getBlockPrefix() { return 'how'; } } |
468 |
投稿日時: 2020/4/28 18:23
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: お問い合わせフォーム追加 元々の問い合わせフォームと新しく追加されたフォームで
1つのContactType.phpを利用しようとされているという事でしょうか? 2つのフォームで入力する項目は一緒という事ですか?
|
tkm12121 |
投稿日時: 2020/4/28 19:05
対応状況: −−−
|
半人前 登録日: 2020/3/19 居住地: 投稿: 13 |
Re: お問い合わせフォーム追加 「新規フォーム」と「元々のフォーム」の内容が変わりますので、ContactType.phpを別々で使用したいのですが、どうやったらよいのか分からない状況です。
新規フォームは、下記サイトを参考にappに追加しました。 https://www.creatorlab.jp/2019/08/17/ec-cube-4%e5%95%8f%e3%81%84%e5%90%88%e3%82%8f%e3%81%9b%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%e3%81%ae%e8%a4%87%e8%a3%bd/ よろしくお願いいたします。 |
468 |
投稿日時: 2020/4/29 12:06
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: お問い合わせフォーム追加 リンク先のページではformTypeは複製していないのですね。
私がフォームを追加する場合は、ContactType.phpをコピーして新しいファイルを追加するかと思います。 (本体のソースを直接触る事になるのであまり良いやり方ではないと思いますが) コピーしたファイルを /src/Eccube/Form/Type/Frontに配置して ファイル名とソース内のクラス名、function getBlockPrefix()の返り値を他のFormTypeクラスと重複しないようにすれば $builder = $this->formFactory->createBuilder(**新しいクラス名**Type::class); で利用できるのではないでしょうか? /app/Customize/Form/Type/Front/にコピーしたファイルを配置しても useでパスを指定する形でも利用できるのではないかと思います。 (その際、コピーしたFormType内のnamespaceも正しいパスに書き換えないとエラーになると思います)
|
tkm12121 |
投稿日時: 2020/4/30 10:00
対応状況: −−−
|
半人前 登録日: 2020/3/19 居住地: 投稿: 13 |
Re: お問い合わせフォーム追加 ご回答ありがとうございます。
内容通りに作成したところ、新・旧フォーム共に使うことが出来ました。本当に助かりました。ありがとうございます! |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |