プラグインではテンプレートを差し込む場合、イベントを通じて差し込みます。
テンプレートファイルの配置場所
テンプレートファイルは本体と同じくResourceディレクトリ配下に置きます。
[プラグインコード]
├── Resource
│ └── template
│ ├── admin
│ │ └── XXXX.twig
│ └── XXXX.twig
テンプレートイベント
EC-CUBE3.0.9からは既存画面に対して項目などの追加を行う場合、テンプレートイベントを利用します。
拡張を行いたい画面に対してイベントを指定するには、本体側のControllerにある
return $app->render('Shopping/complete.twig', array(
とtwigファイルを指定している部分がそのままイベント名となります。
event.ymlには、
Shopping/index.twig:
- [onShoppingIndexRender, NORMAL]
とイベント名を指定します。管理画面の場合、
return $app->render('Order/index.twig', array(
とController側でtwigが指定されていた場合、
event.ymlには
Admin/Order/index.twig:
- [onAdminOrderIndexRender, NORMAL]
とAdmin/
をつける必要があります。
テンプレートイベントによる拡張
既存画面に対して拡張を行うにはテンプレートイベントに対する処理を実装する必要があります。 formを項目として追加したい場合、
- XXXXEvent.php
public function onShoppingIndexRender(TemplateEvent $event)
{
$parameters = $event->getParameters();
$form = $parameters['form'];
$parts = $app['twig']->getLoader()->getSource('[プラグインコード]/Resource/template/parts.twig');
// twigコードに挿入
// 要素箇所の取得
$search = '<div id="xxxx">';
$replace = $parts.$search;
$source = str_replace($search, $replace, $event->getSource());
$event->setSource($source);
}
- parts.twig
<h2 class="heading02">ニックネームの入力</h2>
<div>
{{ form_widget(form.nickname) }}
{{ form_errors(form.nickname) }}
</div>
XXXXEvent.phpにparts.twigの内容も記述しても良いのですが、twigファイルとEvent部分を分離することで可読性がよくなります。
また、JavaSciptタグを追加したい場合、
- XXXXEvent.php
public function onShoppingIndexRender(TemplateEvent $event)
{
$source = $event->getSource();
$tag = <<< EOT
{% block javascript %}
<script>
$(function() {
alert("hoge");
});
</script>
{% endblock javascript %}
EOT;
$event->setSource($source . $tag);
}
と記述すると追加可能です。