ふーむ。
事の起こり
無料プラグインにクーポンはあるんだけど、カスタマイズ性に掛けまくってるんで欲が出ると候補外になる。ということで、「シンプルクーポンプラグイン」が出てくる。
で、やっぱりこの子もそのままだと使えないよねってことで、いじる。
表示位置の変更
決済ページ(/shopping)のとこでクーポンリンクが表示されるんだけど、構成をいじってたら望まない場所に表示されてしまう。だからいじりましょう。
/shoppingに挿入する命令は「app/Plugin/SimpleCoupon/SimpleCoupon.php」の75行目あたりから。
// 書き換え処理ここから
$crawler = new Crawler($content);
$insert_position_id = $this->_getShoppingInsertPosition();
$oldElement = $crawler->filter('#' . $insert_position_id);
if(count($oldElement)==0){
return;
}
$oldHtml = $oldElement->html();
$newHtml = $snipet->getContent() . $oldHtml;
$html = $crawler->html();
$pos = strpos($content, "<head>");
$h1="";
$h2="";
if($pos !== false && $pos>=0){
$h1 = substr($content,0,$pos);
$h2="</html>";
}
$html = str_replace($oldHtml, $newHtml, $html);
// 書き換え処理ここまで
$response->setContent($h1.$html.$h2);
$event->setResponse($response);
今までいじってきたプラグインと多少勝手が違う。
まあでもやってることは変わらんで、結局はstr_replaceで置換前・置換後をアレしてる。
このプラグインは決済選択肢の直前に挿入するようになってる。
str_replaceの手前のところがそうなんだけど、この部分をいじるとぶっ壊れる。
ということを踏まえつつこれをいじっていくことになる。
よくわかんないけど丁寧に作ってある手前、力技になっちゃって気がひけるんだけど、いわゆる一般的な置換のアレに書き換える。具体的には、Shopping/index.twigに置換元のタグを突っ込んでそれを呼び出して置換するようにする。
ということで本体側のテンプレートをいじる。
クーポンページのリンクを表示したいところにこれを挿入する。
<div id="plugin_simplecoupon"></div>
置換用だからユニークであればなんでもいい。コメントアウトでもいい。
で、SimpleCoupon.phpの置換部分をこうする。
// $html = str_replace($oldHtml, $newHtml, $html);
$beforeHtml = '<div id="plugin_simplecoupon"></div>';
$afterHtml = $snipet->getContent();
$html = str_replace($beforeHtml, $afterHtml, $html);
$oldHtml、$newHtmlを使わないんで手前の行の大半が不要になるけど怖いので放置。
指定した要素の中に入れたい・手前に入れたいとかあったら$beforeHtmlと$afterHtmlを変える。
$afterHtmlはこれが最小の状態。
コメント