Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
112 lines (87 sloc) 2.99 KB
title keywords tags sidebar permalink folder
テンプレート
plugin
plugin
home_sidebar
plugin_bp_template
plugin/bp

プラグインではテンプレートを差し込む場合、イベントを通じて差し込みます。

テンプレートファイルの配置場所

テンプレートファイルは本体と同じく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 {% highlight php %} public function onShoppingIndexRender(TemplateEvent $event) { $parameters = $event->getParameters(); $form = $parameters['form'];   $parts = $app['twig']->getLoader()->getSource('[プラグインコード]/Resource/template/parts.twig'); // twigコードに挿入 // 要素箇所の取得 $search = '

    '; $replace = $parts.$search; $source = str_replace($search, $replace, $event->getSource()); $event->setSource($source); } {% endhighlight %}

  • parts.twig {% highlight twig %}

ニックネームの入力

{% raw %} {{ form_widget(form.nickname) }} {{ form_errors(form.nickname) }}{% endraw %}
{% endhighlight %}

XXXXEvent.phpにparts.twigの内容も記述しても良いのですが、twigファイルとEvent部分を分離することで可読性がよくなります。

また、JavaSciptタグを追加したい場合、

  • XXXXEvent.php {% highlight php %} public function onShoppingIndexRender(TemplateEvent $event) { $source = $event->getSource();

    $tag = <<< EOT {% raw %}{% block javascript %}

<script> $(function() { alert("hoge"); }); </script>

{% endblock javascript %}{% endraw %} EOT;

$event->setSource($source . $tag);

} {% endhighlight %}

と記述すると追加可能です。