質問 > その他 > 管理者へ送られる受注メール内にリファラ(遷移前のサイトのURLパラメータ)を記載されるようにするためのカスタマイズ |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
Take05 |
投稿日時: 2021/9/16 11:34
対応状況: 開発中
|
新米 登録日: 2021/9/16 居住地: 投稿: 3 |
管理者へ送られる受注メール内にリファラ(遷移前のサイトのURLパラメータ)を記載されるようにするためのカスタマイズ ▼テンプレート
管理者へ送られる受注メール内にリファラ(遷移前のサイトのURLパラメータ)を記載されるようにしたい ------------------------------------------------------------------------------------------ [EC-CUBE]:4.0.3 [レンタルサーバ]:Apache [OS]:mac [PHP]:7.3.25 [導入プラグインの有無]:無し ------------------------------------------------------------------------------------------ この度初めてご質問させていただきます。 ECCUBE4初心者の為お教え頂ければ幸いです。 管理者へ送られる受注メール内にリファラ(遷移前のサイトのURLパラメータ)を記載されるようにするためのカスタマイズを行う方法をご教授いただきたいです。 現在考えている方法は、 店舗設定 > メール設定 > 注文受付設定 内の記述の、 郵便番号:〒{{ Order.postal_code }}<br/> 住所:{{ Order.Pref.name }}{{ Order.addr01 }}{{ Order.addr02 }}<br/> 電話番号:{{ Order.phone_number }}<br/> メールアドレス:{{ Order.email }}<br/> などとお客様情報が並んでいるところに、 遷移してきたサイト:{{ Order.referer }} のように追加記載をすることで実装しようと考えています。 現状は、ひとまず、各ページに配置したJavaScriptでリファラを取得し、それをセッション変数に保管するようにしてあります。 それを{{ Order.referer }}というデータ変数?として保存したのちに、上記の方法で取得しようと思っております。 この方法で問題ないでしょうか?他により一般的な方法がありましたらご教授いただきたいです。 そして、現在、上記の方法での実装を模索しており、 分からないなりにではありますが、 /src/Eccube/Entity/Order.php 内に /** * @var string|null * * @ORM\Column(name="referer", type="string", length=255) */ private $referer= $_SESSION['refererSession']; と、 /** * Set referer. * * @param string|null $referer * * @return Order */ public function setReferer($referer = null) { $referer = $_SESSION['refererSession']; $this->referer = $referer; return $this; } /** * Get referer. * * @return string|null */ public function getReferer() { return $this->referer; } の記述を足してみたのですが、まだ{{ Order.referer }} で取得ができないようです。おそらく、functionのsetRefererをどこかで実行する部分を追記しないといけないのでしょうか・・・? 追加で記述する必要がある部分やその内容をご教授いただけましたら幸いです。 長くなり非常に恐縮ですが、よろしくお願いいたします。 |
468 |
投稿日時: 2021/9/16 13:52
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 管理者へ送られる受注メール内にリファラ(遷移前のサイトのURLパラメータ)を記載されるようにするためのカスタマイズ メール本文に出力させたいという事であれば
public function getReferer() { return $_SESSION['refererSession']; } のように直接セッション変数の値を返却するようにする形で良いのではないでしょうか? データベースに保存させたいということであれば $Orderが保存される前に setReferer()を実行する必要があると思います。
|
Take05 |
投稿日時: 2021/9/16 15:25
対応状況: −−−
|
新米 登録日: 2021/9/16 居住地: 投稿: 3 |
Re: 管理者へ送られる受注メール内にリファラ(遷移前のサイトのURLパラメータ)を記載されるようにするためのカスタマイズ ご教授いただいたように、
public function getReferer()の中を、 private $referer= $_SESSION['refererSession']; に書き換えましたが、 それだけではまだ、注文受付メール内に{{ Order.referer }} を記述しても、中身がnullなのか、表示が空白になってしまうようです。 phpの深い部分に疎いため自信がないのですが、 コントローラーファイル、例えばOrderController.php あたり?の中身もどこか書き足す必要があるのでしょうか? また、JavaScriptでリファラの取得からセッション変数への代入を行なっておりますので、それをtwig内にphpでセッションを表示する確認も行なえたらより状況が確認できるかもと思っております。 こちらの方法についてもご教授いただけましたら、幸いです。 追加質問となってしまい非常に恐縮ですが、どうぞよろしくお願いいたします。 |
468 |
投稿日時: 2021/9/16 16:31
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 管理者へ送られる受注メール内にリファラ(遷移前のサイトのURLパラメータ)を記載されるようにするためのカスタマイズ そもそもSession変数への代入がうまくいっていないのではないでしょうか?
JavaScriptでリファラの取得はイメージできるのですが そこからセッション変数への代入はどのように行われているのでしょうか? セッション変数はサーバ側で保存されるものだと思いますので サーバへ値を渡す必要があると思います。 PHPの場合、サーバサイドの処理で$_SERVER['HTTP_REFERER']を利用する事が多いのではないかと思うのですが如何でしょうか?
|
Take05 |
投稿日時: 2021/9/16 17:13
対応状況: 解決済
|
新米 登録日: 2021/9/16 居住地: 投稿: 3 |
Re: 管理者へ送られる受注メール内にリファラ(遷移前のサイトのURLパラメータ)を記載されるようにするためのカスタマイズ こちらその後の調査により、ひとまず解決いたしました。
誠に有用なご指摘とアドバイスがきっかけとなり以下の解決策にたどり着きました。 public.html>app>Costmoize内に以下のEvent.phpファイルを作成 <?php namespace Customize; use Eccube\Request\Context; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; use Twig\Environment; class Event implements EventSubscriberInterface { /** @var Context */ protected $requestContext; /** @var Environment */ protected $twig; /** * Event constructor. * * @param Context $requestContext * @param Environment $twig */ public function __construct( Context $requestContext, Environment $twig ) { $this->requestContext = $requestContext; $this->twig = $twig; } /** * @return array */ public static function getSubscribedEvents() { return [ KernelEvents::REQUEST => ['onKernelRequest', 100000000] ]; } /** * @param GetResponseEvent $event */ public function onKernelRequest(GetResponseEvent $event) { // 管理画面は除外 if ($this->requestContext->isAdmin()) { return; } // 共通変数設定 // 別サイトから遷移してきた場合リファラを獲得して、共通変数に入れる。 // そのURLはtwig上で{{referer}}で取り出せるようにする。 session_start(); if( isset( $_SESSION['refererSession'] ) ) { $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null; if(strpos($referer,'当サイトのURL') === false){ $_SESSION['refererSession'] = $referer; }else{ } } $referer_tmp = $_SESSION['refererSession']; $this->twig->addGlobal('referer', $referer_tmp); } } 拙い部分や改善すべき点がありましたらまたご指導いただけましたら幸いです。 心より御礼申し上げます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |