SmartyでHTMLソースの変更が反映されません
お世話になります。
先日、デザイナーと全てのサイト及びフォーム関連を完全にテンプレート化しようという
話になり、Smartyを導入しフォーム関連に取り掛かっていたところ、テンプレートファイルの
内容を書き換えてリロードしても最新の内容がブラウザへ反映されませんでした。
PHPファイルをサーバへ上書きアップロードをすると最新の内容が反映されます。
しかし、デザイナーからしてみると細部の調整等を行う際にその都度PHPファイルも
アップロードするのが非常に面倒くさいので、テンプレートファイルのみをアップした
タイミングで最新の内容が反映する方法を1週間ほど調べてみたのですが、
上手く行かずに難儀しております。
この現象が発生するのは、セッションを使用したフォーム関連のページのみです。
「 templates_c 」ディレクトリのキャッシュファイルを削除しても変更されません。
Smartyの設定自体はデフォルトのままです。「 caching 」も0のままで、特に変更は
しておりません。
検証を手順として説明させていただくと、
1、テンプレートファイルのHTMLソースを変更してアップロード。
2、ブラウザで確認すると、変化無し。
3、「 templates_c 」のキャッシュファイルは更新されていて、中身を確認すると正常にコンパイルされている。
4、大元のPHPファイルを上書きアップロードしてブラウザをリロードすると、HTMLソースの変更内容が正常に反映される。
以上の事から、PHPのスクリプトに問題があるのかと思いましたので、勝手ながらスクリプトの
大まかな内容を記載させていただきます。
--- ■ ココから-------------------------------------------
// セッションの開始
session_cache_limiter("public");
session_start();
require("Smarty.class.php");
define("DEF_ACT", "entry"); // 初期アクセスしたページ
define("MAIL_TO", "アカウント@ドメイン"); // 送信先
define("subject", "テスト送信"); // 件名
// Smartyを走らせる
$smarty = new Smarty();
$smarty->template_dir = "./templates";
$smarty->compile_dir = "./templates_c";
// データをPOSTメソッドで
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$param = cnv_formstr($_POST);
}
// 各ページの判別処理を行い
$act = isset($param["act"]) ? $param["act"] : DEF_ACT;
$screen_function_name = "screen_" . $act;
if (!function_exists($screen_function_name)) {
exit();
}
call_user_func($screen_function_name, $param);
$temp_name = $act . ".html";
// テンプレートを表示する
$smarty->assign("url", $_SERVER["PHP_SELF"]);
$smarty->display($temp_name);
// =========================================================
// 入力画面( 初期アクセスしたページ )
// =========================================================
function screen_entry($param) {
~ 処理内容 ~
return TRUE;
}
// =========================================================
// 確認画面( 入力チェックが通った場合 )
// =========================================================
function screen_conf($param) {
global $smarty;
~ 処理内容 ~
return TRUE;
}
// =========================================================
// 送信完了画面
// =========================================================
function screen_submit($param) {
global $smarty;
~ 処理内容 ~
return TRUE;
}
// =========================================================
// 入力データチェック( 未入力等があった場合 )
// =========================================================
function screen_data($param) {
global $smarty;
~ 処理内容 ~
}
// =========================================================
// 配列を一括変換する
// =========================================================
function cnv_formstr($array) {
~ 処理内容 ~
}
--- ■ ココまで-------------------------------------------
PHPのバージョンは、5.3.3です。
因みにこのスクリプトでは、データベースは使用しておりません。
同様の経験をされて解決された方がおられましたら、ご教示の程
どうぞよろしくお願い申し上げます。
お礼
やってみましたが改善しませんでした。 Smartyのバグかもしれませんねぇ・・
補足
解決しました。 ob_start();ob_end_flush();ではダメで、 php.iniで、バッファリングOnにしたら上手く表示されました。 ありがとうございます。