• 2018.05.30
  • EC-cube

【EC-cube3】メルマガ配信で都道府県を複数選択できるようにしたい

【EC-cube3】メルマガ配信で都道府県を複数選択できるようにしたいのイメージ画像

EC-cube3系でメルマガを送る際に、複数の都道府県でセグメントをかけたいという要望がありました。

ちなみにEC-cube3系ではデフォルトでメルマガ機能がついてないので、「メルマガ管理プラグイン」をインストールする必要があります。

まずはメルマガ管理プラグインをインストール

app/Plugin/内に各データ(MailMagazineフォルダ)がインストールされます。

今回の作業をざっくりと項目にすると

  • ・管理画面のフォームをチェックボックスに変更
  • ・複数選択になるので配列化してDBと照合

管理画面のフォームをチェックボックスに変更

EC-cubeインストールフォルダ/admin/plugin/mail_magazineの検索フォームの見た目を変更します。

デフォルトではプルダウンの単一選択なので、チェックボックスに変更して複数選択にしたいと思います。

プルダウンのまま複数選択にすることもできますが、今回は見やすさを考慮してチェックボックスに。。

/Plugin/MailMagazine/Form/Type/MailMagazineType.phpに下記修正

            ->add('pref', 'pref', array(
                'label' => '都道府県',
                'required' => false,
		'expanded' => true,   //チェックボックスにするため追加
		'multiple' => true,   //複数選択にするため追加
            ))

複数選択になるので配列化してDBと照合

上記で見た目だけは複数選択になりますが、実際に検索ボタンを押してみるとエラーが出ると思います。

/Plugin/MailMagazine/Repository/MailMagazineCustomerRepository.phpの下記部分を

// Pref
        if (!empty($searchData['pref']) && $searchData['pref']) {
            $qb
                ->andWhere('c.Pref = :pref')
                ->setParameter('pref', $searchData['pref']->getId());
        }

下記に変更

// Pref
	if (!empty($searchData['pref']) && count($searchData['pref']) > 0) {
			$prefs = array();
            foreach ($searchData['pref'] as $pref) {
                $prefs[] = $pref->getId();
            }
            $qb
                ->andWhere($qb->expr()->in('c.Pref', ':prefs'))
                ->setParameter('prefs', $prefs);
        }

あとはレイアウトの調整をお好みで

都道府県をチェックボックスにすると多分レイアウトが崩れると思います。

/Plugin/MailMagazine/Resource/template/admin/index.twig ファイルを編集すれば、その辺の調整もできますので、お好みで対応お願いします。

デバッグの仕方がわからない方はこちらの記事をご覧ください。