Template-Toolkitのテンプレートファイル参照について

このQ&Aのポイント
  • Template-Toolkitを使用してhtmlを出力するプログラムを作成中です。テンプレートファイルの指定の仕方について質問させて下さい。
  • 現在はtest1.cgiとtest1.tt(テンプレートファイル)を同一ディレクトリに保存して実行すると正常に動作しますが、別ディレクトリにて管理したいと考えています。
  • ttファイルを別ディレクトリから参照する場合の方法を教えて頂けませんか?
回答を見る
  • ベストアンサー

Template-Toolkitのテンプレートファイル参照について

Template-Toolkitを使用してhtmlを出力するプログラムを作成中です。 環境はlinuxでperlはv5.8.9、Templateモジュールはv2.20です。 以下は例として環境変数を出力するコードですが、 テンプレートファイルの指定の仕方について質問させて下さい。 ---test1.cgi------------------------ #!/usr/local/bin/perl -w use Template; print "Content-type: text/html\n\n"; my $path ="test1.tt"; my $tpl = Template->new() || die $Template::ERROR; $tpl->process($path,\%ENV) || die $tpl->error; exit; --------------------------------- 現在はtest1.cgiとtest1.tt(テンプレートファイル)を同一ディレクトリ(~XXXX/配下)に保存してtest1.cgiを実行すると正常に動作するのですが、 これを~XXXX/cgi/と~XXXX/tt/にてそれぞれcgiファイルとttファイルを別ディレクトリにて管理したいと考えています。 しかし、別ディレクトリのttファイルを$pathに指定して実行した場合に、以下のエラーとなってしまいます。 絶対パスの場合 absolute paths are not allowed (set ABSOLUTE option) 相対パスの場合 relative paths are not allowed (set RELATIVE option) ttファイルを別ディレクトリより参照する場合の方法を教えて頂けないでしょうか? よろしくおねがいします

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そこに書いてある通り, Template->new() を呼び出すときに ABSOLUTE なり RELATIVE のオプションを与えないといけないんじゃないの? 与え方は知らんけど, 調べれば出てくるような気がする.

turubeelll
質問者

お礼

当初調べても出てこなかったのですが、探してみたら設定方法が分かりました。 newする際に以下のオプションで相対パスが指定できるようになりました。 Template->new(RELATIVE=>1); ありがとうございました。

関連するQ&A

  • Template-Toolkit の外部テンプレートについて

    perlの初心者です。HTMLテンプレートとして、cpanのTemplate-Toolkitを勉強している最中です。 ディレクトリ  /htdocs/   /lib/ttk.pl #CGIスクリプト   /tmpl/ttk.tpl #HTMLテンプレート(<body>以下)   /html/header #HTMLテンプレート(HTMLヘッダー) 上記の構成で、ttk.plを実行すると、ttk.tplからheaderを読み込み、HTMLを出力するプログラムを作成しているのですが、ttk.tplからheaderをincludeするとエラーが発生します。 ttk.tpl の冒頭に記述 [% INCLUDE ../html/header %]でエラーになります。 補足)/lib/内にheaderを持ってきて、 [% INCLUDE header %]とすれば成功はします。 おそらく、ディレクトリ指定の仕方が間違っていると思うのですが、../の場合の指定がわかりません。 マニュアルを見ても、../の場合の説明がありません。 http://www.hakoniwa.net/tt/ わかる方、ご指導いただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Smarty includeでテンプレートを読み込めない

    よろしくお願いします。 まずphpファイルから $smarty->display('111/body.tpl');(*111はディレクトリ名) を呼び出して、さらにbody.tplと同ディレクトリにあるcontents.tplを読み込もうとしています。 はじめのbody.tplは読み込むことができブラウザで表示されるのですが、contents.tplは読み込めず、 Warning: Smarty error: unable to read resource: "contents.tpl" in <絶対パス>/Smarty/Smarty.class.php on line 1095 のエラーが出てしまいます。 ちなみに/111/というディレクトリは、$template_dir以下、$template_dir/111/です。 {include file="contents.tpl"} {include file="file:contents.tpl"} {include file="絶対パス/contents.tpl"} {include file="file:絶対パス/contents.tpl"} など試しましたが、ダメでした。 知恵をお貸しください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • テンプレートファイルについて

    ■質問です ホームページを作成するために必要でしたので、あるcgiを購入しました。 そのcgiでは、「デザイン部分のみ別になっているテンプレート方式ですので、自由にデザインを変更可能」とありましたので、商品を確認したところ、確かに別フォルダに.tplという拡張子のテンプレートファイルが存在しました。なお、そのファイルは「Smarty」で作成したものという表記がありました。 そこで、以下についてお聞きしたいのですが…、 ・そのファイルを編集(デザイン編集)するには、具体的にどんなソフトが必要なのでしょうか?ちなみに当方はホームページビルダー9.0を使用しています。 ・ホームページビルダー9.0で開くことができませんでした。開いて編集する操作方法をご存知でしょうか? 漠然とした質問で申し訳ありませんが、作業が進まず非常に困っています。ご存知の方、アドバイスをいただけると助かります。。。よろしくお願いいたします。

  • テンプレートファイルについて

    ほぼ初心者からの質問です。言葉足らずな面があるかと思いますが、よろしくお願いします。 ■質問 ホームページを作成するために必要でしたので、あるcgiを購入しました。 そのcgiでは、「デザイン部分のみ別になっているテンプレート方式ですので、自由にデザインを変更可能」とありましたので、商品を確認したところ、確かに別フォルダに.tplという拡張子のテンプレートファイルが存在しました。なお、そのファイルは「Smarty」で作成したものという表記がありました。 そこで、以下についてお聞きしたいのですが…、 ・そのファイルを編集(デザイン編集)するには、具体的にどんなソフトが必要なのでしょうか?ちなみに当方はホームページビルダー9.0を使用しています。 ・ホームページビルダー9.0で開くことができませんでした。開いて編集する操作方法をご存知でしょうか? 漠然とした質問で申し訳ありませんが、作業が進まず非常に困っています。ご存知の方、アドバイスをいただけると助かります。。。よろしくお願いいたします。

  • 共通テンプレートを呼ぶ

    src/common/header.tplを src/hoge/hoge.tplから {include file="../common/header.tpl"} として呼びだしたい。 エラーメッセージが Warning: Smarty error: (secure mode) accessing "../common/header.tpl" is not allowed in C:\php\libs\Smarty.class.php on line 1088 です。 #### 設定 php.ini include_path = ".;C:\php\libs;C:\php\PEAR" safe_mode = Off Smarty.class.php $smarty->template_dir="."; {include file}を絶対パスで記述しても同じエラーです。 おそらくこのsecure modeの設定が正しく設定されていないのでしょうが その設定方法がいまいちよくわかりません。 簡単なことなのかもしれませんが、ご存知の方がいらっしゃいましたら ご教授願えないでしょうか。 よろしくお願いいたします。 環境 Windows XP php-5.0.5 Smarty-2.6.10

    • 締切済み
    • PHP
  • テンプレートファイルでCSSファイルを読み込む指定をしましたが、うまく

    テンプレートファイルでCSSファイルを読み込む指定をしましたが、うまく読みこめていないようで、 CSSファイルで指定した項目を意図した位置に表示することができません。 SMARTYを使ってます。テンプレートファイルにHTMLを記述しています。 環境は、WINDOWS VISTAにApacheを入れて動かしています。 このテンプレートファイル(reg.tpl)の中でのCSSファイルの読み込みやCLASSの指定では次のように書いてます。 (1)reg.tplの内容です。 <HTML> <HEAD> <TITLE>{$title}</TITLE> {$form.javascript} <link rel="stylesheet" href="layout.css" type="text/css" />  →ここでCSSファイルの読み込み指定 </HEAD> <BODY bgcolor="#FFFFFF"> <CENTER> <HR size="1" noshade> <B>{$title}</B> <HR size="1" noshade> <DIV id="l1" CLASS="userid"> →ここでCSSファイルで設定したものを指定 <FONT size="2">{$form.user_id.label}:</FONT> {if $form.user_id.error } <font size="2">{$form.user_id.error}</font><BR> {/if} {$form.user_id.html} </DIV> ~中略 (2)layout.cssの内容です。 .userid { position : absolute; top: 545px; left: 150px; width: 5%; border:0px solid #FFB6C1; } (3)ファイルの設置場所は次の通りです。 ┳templates━reg.tpl ______┗layout.css (4)layout.cssをサーバーにアップロードして、上記(1)のreg.tplの<link …の指定部分を次のように絶対パスに変更すると layout.cssが正常に読み込めます。(userid項目がcssファイルに指定した位置に表示されます) <link rel="stylesheet" href="http://www.****.com/layout.css" type="text/css" /> (5)<link …で(1)のように指定した場合、layout.cssとreg.tplが同じフォルダにあれば実行しても cssファイルが読み込めると認識していたのですが読み込めません。 index.htmlファイルとcssファイルを同じフォルダにおいて、index.htmlの中に(1)の<link …のようにファイル名のみの記述をするとうまく読み込めます。 テンプレートファイルの中で使う項目にCSSファイルを利用して自由なレイアウトを実現したいのですが、絶対パスでCSSファイルを指定する方法以外にないのでしょうか? 分かる方、ご教授下さい。

    • ベストアンサー
    • HTML
  • shtmlより参照できないディレクトリ

    いつもお世話になります。 下記のようなディレクトリ構成でshtmlよりperlのcgiプログラムをコールしております。(cgiは全てcgiディレクトリの中に格納) shtml上から上位ディレクトリからcgiディレクトリを参照できるのですが、下位ディレクトリからshtmlより参照することができません。 ※現状ではcgiを下位ディレクトリにshtmlと一緒に配置してしのいでおります。 ※cgi本体からは../cgiの中を参照できております。 root--- | ---cgi--dbfile | | | ---topic | | | ---img 中略 | par この場合rootにあるindex.shtmlよりcgiディレクトリにあるtest.cgiをexec cmdでコールする場合 「<!--exec cmd="./cgi/test.cgi"-->」コール可能です。 ところがparにあるindex.shtmlよりcgiディレクトリにtest.cgiをコールする場合「<!--exec cmd="../cgi/test.cgi"」とするとcgiをコールできません。 記述方法は間違いがないと思いますが、上位ディレクトリからはcgiディレクトリを参照できて、下位ディレクトリからcgiフォルダを参照できないのはなぜでしょうか? ※この例でいくとparフォルダにtest.cgiを配置しshtmlより<!--exec cmd="test.cgi"-->とすると コールできます。test.cgi本体からは../cgi/~のような記述でcgiフォルダを参照できております。 パスなど環境設定でしょうか? 大変恐縮ですが、どなたかご教示願います。

    • ベストアンサー
    • Perl
  • Smartyでtplファイルから配列をassignする方法

    Smartyを使っているんですが、テンプレートファイル(.tpl)側から配列の要素を入れることができません。 PHPからだと、 $test[test]="内容"; $smarty->assign("test",$test); でいけるんですが、tplからだと、 {assign var="test.test" value="内容"} としても入らないんです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • マクロ有効テンプレートのカレントディレクトリ

    Excel2010マクロ有効「テンプレート」で、マクロを組んでいます。 そのテンプレートが存在するディレクトリを取得したいのですができません。 Excelのファイルメニューからテンプレートを開いた場合は、 ThisWorkbook.path で取得できるのですが、テンプレートのアイコンをダブルクリックして開いた場合はThisWorkbook.pathには何も設定されていません。 当たり前といえば当たり前かもしれませんが、何とか取得できる方法はありませんでしょうか。

  • tplファイルのプレビューの方法

    tplファイルのプレビューの方法 テンプレートファイルであるtplの修正を行っています。 もともとの状況として サーバー1:イメージ(imageフォルダと思ってください) サーバー2:ソース となってます。 サーバー2の最上層にはindex.tplがあり、 http://ドメイン/ で表示されます。 しかし、同じ層にtest.tplを作成して http://ドメイン/test.php とした場合はエラーが出て表示されません。 ならばと思い、test.phpと同じソースで別途index.tplを作り サーバー2にtestフォルダを作成してその中に test_____image | |__index.tpl のように格納して http://ドメイン/test/ で試してみたのですがやっぱり表示されません。 作成したtplファイルをプレビューしたいだけなのですが どのようにすればプレビューできるのでしょうか? 以上は例ですが、いろいろな階層のtplをテスト修正した内容を プレビューする必要があるので もともとあるファイルの名前だけ変えてプレビューできる方法を必要としています。 どなたかお教えいただけないでしょうか? 追記: もともとあるファイルは仕事上既に稼働しているので、 一時的にそのファイル名を利用することもできません。 プログラムが絡んでいるので、サーバー上でなければプレビューできません。

    • 締切済み
    • PHP

専門家に質問してみよう