Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

今思い出すと、なぜすぐに気づかなかったのか不思議ですが、
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

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

voyage_nh
社会人4年目になります。 2年と半年ぐらい独立系SEやって、 今は都内の社内SEやっています。 まだまだ初心者です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした