LoginSignup
1
2

More than 5 years have passed since last update.

Phalconのvoltでタイトルタグをview内で設定したい

Last updated at Posted at 2015-08-27

大概のテンプレートエンジンで、titleタグは共通のテンプレートに入っているかと思います。
そして、タイトルの中身はController内ではなく、後で指定したい事もあるかと思います。
そんな時は、表示しようとしているviewでsetしてやればいいだけみたいです。

view/index.volt
<html>
  <head>
    <title>{{ title | e }}</title>
  </head>
  <body>
    {{ content() }}
  </body>
</html>
view/controller/action.volt
{% set title = "タイトルです" %}

簡単ですねー

おまけ

他のvoltと変数を共有するってことは、安易な名前を付けるとかぶってしまうんじゃ?
と、思ったので、下記ソースで実行順を調べてみました。

view/index.volt
INDEX_TOP before:{{ title }}<br />
{% set title = "INDEX_TOP" %}
INDEX_TOP after:{{ title }}<br />

{{ partial("header") }}
{{ content() }}
{{ partial("footer") }}

INDEX_LAST before:{{ title }}<br />
{% set title = "INDEX_LAST" %}
INDEX_LAST after:{{ title }}<br />
view/header.volt
HEADER before:{{ title }}<br />
{% set title = "HEADER" %}
HEADER after:{{ title }}<br />
view/footer.volt
FOOTER before:{{ title }}<br />
{% set title = "FOOTER" %}
FOOTER after:{{ title }}<br />
view/partial.volt
PARTIAL before:{{ title }}<br />
{% set title = "PARTIAL" %}
PARTIAL after:{{ title }}<br />
view/controller/action.volt
CONTENTS_TOP before:{{ title }}<br />
{% set title = "CONTENTS_TOP" %}
CONTENTS_TOP after:{{ title }}<br />
{{ partial("partial") }}
CONTENTS_LAST before:{{ title }}<br />
{% set title = "CONTENTS_LAST" %}
CONTENTS_LAST after:{{ title }}<br />

で、結果は以下。

実行結果
INDEX_TOP before:CONTENT_LAST
INDEX_TOP after:INDEX_TOP
HEADER before:INDEX_TOP
HEADER after:HEADER
INDEX_LAST before:FOOTER
INDEX_LAST after:INDEX_LAST
CONTENTS_TOP before:
CONTENTS_TOP after:CONTENTS_TOP
PARTIAL before:CONTENTS_TOP
PARTIAL after:PARTIAL
CONTENTS_LAST before:PARTIAL
CONTENTS_LAST after:CONTENTS_LAST
FOOTER before:HEADER
FOOTER after:FOOTER

以下の順で実行されているようです。

  1. CONTENTS_TOP
  2. PARTIAL
  3. CONTENTS_LAST
  4. INDEX_TOP
  5. HEADER
  6. FOOTER
  7. INDEX_LAST

このことから、contents()を実行後、index.voltを実行といった所でしょうか。
partialに関しては記載されている順序で実行のようです。

ちなみにController内で設定したものは最優先のようで、上書きもできないみたいです。
デフォルトを設定したい場合はdefinedで調べて処理を変えるのがよさそうかも?

<title>
{% if title is defined %}
  {{ title | e }}
{% else %}
  デフォルトのタイトル
{% endif %}
</title>
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2