想定URL
www.hogehoge.com/Restock?item_code=00000&item_name=hogehoge
パラメーターで品番、品名を取得
EccubeEvents.php
イベントの追加
// 再入荷通知
/**
* RestockController
*/
// index
const FRONT_RESTOCK_INDEX_INITIALIZE = 'front.restock.index.initialize';
const FRONT_RESTOCK_INDEX_COMPLETE = 'front.restock.index.complete';
/**
* MailService
*/
const MAIL_RESTOCK = 'mail.restock'; // 再入荷通知
FrontControllerProvider.php
//contact から2行を複製
URL ルーティング設定
関連箇所を編集
// restock 再入荷通知
$c->match('/restock', '\Eccube\Controller\RestockController::index')->bind('restock');
$c->match('/restock/complete', '\Eccube\Controller\RestockController::complete')->bind('restock_complete');
RestockController.php
ContactController.phpを複製し作成
関連箇所を編集
品番と商品名をGETパラメーターより取得
$item_code = $request->query->get('item_code');
$item_name = $request->query->get('item_name');
if ($app->isGranted('ROLE_USER')) {
$user = $app['user'];
$builder->setData(
array(
'name01' => $user->getName01(),
'name02' => $user->getName02(),
'company_name' => $user->getCompanyName(),
'email' => $user->getEmail(),
// フォームタイプにセット
'item_code' => $item_code,
'item_name' => $item_name,
)
);
}
パラメーターなしのURLへのアクセスがあった場合にエラーを返す
完了画面のレンダリング前に挿入
// item_code,nameがセットされていなければ
//パラメーターが空の場合エラー処理
if ($item_code == NULL or $item_name == NULL ){
return( '不正な処理です' );
}
取得した品番、品名をレンダリングで受け渡し
return $app->render('Restock/index.twig', array(
'form' => $form->createView(),
// パラメーター 直でレンダリングする場合
'item_code' => $item_code,
'item_name' => $item_name,
));
EccubeServiceProvider.php
フォームタイプを追加
// front
・
・
・
$types[] = new \Eccube\Form\Type\Front\RestockType($app['config']); // 再入荷通知
RestockType.php
ContactType.phpを複製し作成
関連箇所を編集
RestockController.phpで取得した情報のフォームタイプを指定
->add('name01', 'hidden', array(
'required' => true,
))
->add('name02', 'hidden', array(
'required' => true,
))
->add('company_name', 'hidden', array(
'required' => true,
'label' => '会社名',
))
->add('item_code', 'hidden', array(
'required' => false,
'label' => '品番',
))
->add('item_name', 'hidden', array(
'required' => false,
'label' => '商品名',
))
->add('email', 'email', array(
'required' => true,
'constraints' => array(
new Assert\NotBlank(),
new Assert\Email(array('strict' => true)),
),
));
Restock/hogehoge.twig
テンプレート一式
Restock/index.twig - フォーム画面
<form name="form1" id="form1" method="post" action="{{ url('restock') }}">
{{ form_widget(form._token) }}
<div id="top_box__body_inner" class="dl_table">
{{ form_row(form.name01) }}
{{ form_row(form.name02) }}
{{ form_row(form.company_name) }}
<dl id="top_box__email">
<dt>{{ form_label(form.item_code) }}</dt>
<dd>
<div class="form-group">
{{ item_code }}
{{ form_widget(form.item_code) }}
{{ form_errors(form.item_code) }}
</div>
</dd>
</dl>
<dl id="top_box__email">
<dt>{{ form_label(form.item_name) }}</dt>
<dd>
<div class="form-group">
{{ item_name }}
{{ form_widget(form.item_name) }}
{{ form_errors(form.item_name) }}
</div>
</dd>
</dl>
<dl id="top_box__email">
<dt>{{ form_label(form.email) }}</dt>
<dd>
<div class="form-group">
{{ form_widget(form.email) }}
{{ form_errors(form.email) }}
</div>
</dd>
</dl>
</div>
Restock/complete.twig - 完了画面
任意で編集
今回は確認画面は使用しない(Restock/confirm.twig)
Contact/index.twig , confirm.twig , complete.twig を複製し作成
関連箇所を編集
MailService.php
メール送信機能
sendContactMailを複製
// 再入荷通知
/**
* Send restock mail.
*
* @param $formData 再入荷通知内容
*/
public function sendRestockMail($formData)
{
log_info('再入荷通知受付メール送信開始');
$body = $this->app->renderView('Mail/restock_mail.twig', array(
'data' => $formData,
'BaseInfo' => $this->BaseInfo,
));
// 問い合わせ者にメール送信
$message = \Swift_Message::newInstance()
->setSubject('[' . $this->BaseInfo->getShopName() . '] 再入荷お知らせメールのお申し込みを受け付けました。')
->setFrom(array($this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()))
->setTo(array($formData['email']))
->setBcc($this->BaseInfo->getEmail01())
->setReplyTo($this->BaseInfo->getEmail01())
->setReturnPath($this->BaseInfo->getEmail01())
->setBody($body);
$event = new EventArgs(
array(
'message' => $message,
'formData' => $formData,
'BaseInfo' => $this->BaseInfo,
),
null
);
$this->app['eccube.event.dispatcher']->dispatch(EccubeEvents::MAIL_RESTOCK, $event);
$count = $this->app->mail($message);
log_info('再入荷通知受付メール送信完了', array('count' => $count));
return $count;
}
/**
* Alias of sendRestockMail().
*
* @param $formData 再入荷通知内容
* @see sendRestockMail()
* @deprecated since 3.0.0, to be removed in 3.1
* @link https://github.com/EC-CUBE/ec-cube/issues/1315
*/
public function sendrRestockMail($formData)
{
$this->sendRestockMail($formData);
}
Mail/restock_mail.twig
確認メールの自動配信
※本メールは自動配信メールです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{{ BaseInfo.shop_name }} 再入荷お知らせメールお申し込み受付完了
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{{ data.company_name }}
{{ data.name01 }} {{ data.name02 }} 様
いつも{{ BaseInfo.shop_name }}をご利用いただき、ありがとうございます。
以下の内容で再入荷お知らせメールのお申し込みを受け付けました。
■商品情報
品番:{{ data.item_code }}
商品名:{{ data.item_name }}
■ご通知先メールアドレス
{{ data.email }}
入荷次第ご連絡いたしますので、お待ちください。