CONTENTS

新規会員登録情報に項目をカスタマイズ追加する(ECCube4)

投稿日:2023.8.10

更新日:2023.10.11

ECCubeを/shopにインストールした場合です。
新規会員登録情報に電話番号(緊急連絡先)の項目を追加するサンプル例になります。

CustomerTraitの作成

/shop/app/Customize/Entity
の直下に、
EntityCustomerTrait.php
を作成します。

以下のような内容にしてください。

<?php
namespace Customize\Entity;

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

/**
 * @EntityExtension("Eccube\Entity\Customer")
 */
trait EntityCustomerTrait
{
    /**
     * @var string|null
     * @ORM\Column(type="string", length=14, nullable=true)
     * @Eccube\Annotation\FormAppend(
     *     auto_render=false,
     *     type="\Symfony\Component\Form\Extension\Core\Type\TextType",
     *     options={
     *          "required": true,
     *          "label": "電話番号(緊急連絡先)",
     *          "attr": {"placeholder": "例:09000000000"}
     *     })
     * @Assert\NotBlank(message="入力されていません。")
     */
	private $mobile_number;
    /**
     * @return string|null
     */
    public function getMobileNumber()
    {
        return $this->mobile_number;
    }

    /**
     * @param string|null $mobile_number
     * @return CustomerTrait
     */
    public function setMobileNumber($mobile_number)
    {
        $this->mobile_number = $mobile_number;
        return $this;
    }
}

FTPでアップロードします。

SSHでデータベースに追加

/shop/bin/console
のパーミッションを705に設定。
FTPソフトでパーミッションの変更が可能です。

SSHでログインします。
SSHはSSH用クライアントソフト「Poderosa」を使うと便利です。

/shop(ECCubeをインストールした場所)に移動します。

cd /home/xxx/www/shop

/home/xxx/www/shopは例です。

/shopで以下のコマンドを実行します。

bin/console eccube:generate:proxies

/shop/app/proxy/entity/src/Eccube/Entity/Customer.php
が生成される。

一度キャッシュクリア

bin/console cache:clear --no-warmup

コマンド

bin/console eccube:schema:update --force --dump-sql

→データベースにテーブルが追加される

テンプレートの追加

/shop/src/Eccube/Resource/template/default/Entry/index.twig
をコピーし、
/shop/app/template/default/Entry/index.twig
にペーストします。

入れたい場所に項目を追加編集します。

<dl>
	<dt>
		{{ form_label(form.mobile_number, '電話番号(緊急連絡先)', { 'label_attr': { 'class': 'ec-label' }}) }}
	</dt>
	<dd>
		<div class="ec-telInput{{ has_errors(form.mobile_number) ? ' error' }}">
			{{ form_widget(form.mobile_number) }}
			{{ form_errors(form.mobile_number) }}
		</div>
	</dd>
</dl>

他のテンプレートも同様に追加します。
/shop/app/template/default/Entry/confirm.twig
/shop/app/template/default/Mypage/change.twig

FTPでアップロードし、キャッシュをクリアします。

新規会員登録のページで確認してみてください。

数字(フラグ)の場合は、以下のような感じ。

データベースはintタイプ、初期値は0

	 /**
	 * @var integer|null
	 * @ORM\Column(type="integer", nullable=false, options={"default" = 0})
	 * @Eccube\Annotation\FormAppend(
	 *     auto_render=false,
	 *     type="\Symfony\Component\Form\Extension\Core\Type\IntegerType",
	 *     options={
	 *          "required": false,
	 *          "label": "会員フラグ",
	 *     })
	 */
	private $is_entry;

	/**
	 * @return integer|null
	 */
	public function getIsEntry()
	{
		return $this->is_entry;
	}

	/**
	 * @param integer|null $is_entry
	 * @return CustomerTrait
	 */
	public function setIsEntry($is_entry)
	{
		$this->is_entry = $is_entry;
		return $this;
	}

選択の場合は、以下のような感じ。

	 /**
	 * @var string|null
	 * @ORM\Column(type="string", length=255, nullable=false)
	 * @Eccube\Annotation\FormAppend(
	 *     auto_render=false,
	 *     type="\Symfony\Component\Form\Extension\Core\Type\ChoiceType",
	 *     options={
	 *          "label": "事業形態",
	 *          "choices": {"法人":"法人","個人事業主":"個人事業主"},
	 *          "required": true,
	 *          "expanded": true,
	 *          "multiple": false,
	 *          "mapped": true,
	 *     })
	 * @Assert\NotBlank(message="選択されていません。")
	 */
	private $company_type;

	/**
	 * @return string|null
	 */
	public function getCompanyType()
	{
		return $this->company_type;
	}
一覧へ

お問い合わせ

ホームページ制作のご依頼・ご相談・お見積りなど、どんなことでもお気軽にお問合せ下さい。折り返し、担当者よりご回答させていただきます。