LoginSignup
3
5

More than 5 years have passed since last update.

smarty ~テンプレートファイルから別のテンプレートファイルを呼び出す~

Posted at

今思い出すと、なぜすぐに気づかなかったのか不思議ですが、
smartyを使ってファイルのincludeをしたら、以下のエラーが出てしまいました。
今回は、このエラーの解決方法を書いていきます。

 Unable to read template file 'hoge.tpl'

そもそも何を作ろうとしたのか

テンプレートファイルの中から
テンプレートファイルを読み込もうとしました。
例えば下記↓

index.tpl
<html>
<head><title></title></head>
<body>
   {include file='hoge.tpl'}
</body>
</html>
hoge.tpl
hogehoge

画面の表示結果は、こうなるはず。(ここで冒頭のエラーが出てしまった…。)

表示結果
hogehoge

フォルダ構成は以下

フォルダ構成
views
  ┗ templates
        ┗ test
            ┣ index.tpl
            ┗ hoge.tpl

さて、解決していきましょうか。

必要な知識を確認っと・・・。
まず、smartyのマニュアルから下記の文言が…
参照:http://www.smarty.net/docsv2/ja/template.resources.tpl

使用したいテンプレートへのパスを、 $template_dir のルートディレクトリからの相対パスで指定します。

おぉっと、$template_dirとはなんなのか。
こちらもsmartyマニュアルでは、
参照:http://www.smarty.net/docsv2/ja/api.variables.tpl#variable.template.dir

$template_dir
これは、デフォルトのテンプレートディレクトリの名前です。 
ファイルのインクルード時にリソースの種類を指定しなかった場合は、 
このディレクトリから探します。デフォルトは ./templates で、 
これは、実行しているスクリプトと同じ場所にある templates/ ディレクトリを探すということです。

となっており、./templates から対象のファイルをパス指定すべきであることが分かります。

ここまでの情報を得ておきながら、ずっとうまくいかず悩んでいたのですが、
私の場合は、下記の文章をちゃんと読んでいなかったせいだということが分かりました。

$template_dir のルートディレクトリからの相対パス

ずっと、呼び出し元からの相対パスを指定していました。
ルートディレクトリからの相対パスなので、この場合は、以下のようになります。

index.tpl
<html>
<head><title></title></head>
<body>
   {include file='../test/hoge.tpl'}
</body>
</html>
フォルダ構成
views
  ┗ templates
        ┗ test
            ┣ index.tpl
            ┗ hoge.tpl

解決しました。お疲れ様ですー。

3
5
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
3
5