ホームページ  >  記事  >  ウェブフロントエンド  >  Thinkphpテンプレートが解析せずそのまま出力できない問題の解決策_javascriptスキル

Thinkphpテンプレートが解析せずそのまま出力できない問題の解決策_javascriptスキル

WBOY
WBOYオリジナル
2016-05-16 16:32:323406ブラウズ

この記事の例では、Thinkphp テンプレートが解析されず、そのまま直接出力する問題の解決方法を説明します。皆さんの参考に共有してください。詳細は以下の通りです。

1. 質問:

最近 thinkphp のテンプレートを勉強していたのですが、一生懸命探した結果、テンプレートのページがそのまま出てきたことがわかりました。

2. 解決策:

多くの人が同じ問題に遭遇しています。変数に割り当てられた文字列に含まれる __ROOT__、__PUBLIC__、および __APP__ は、テンプレートに表示されるときに実際のパスに置き換えられます。私は Timi ファイル管理システムを作成しているときにこの問題を発見しました。

ファイルからソースコードを読み込んでページに出力したところ、TP パス文字であれば実際のパスに置き換えられていることがわかりました。
例:

コードをコピー コードは次のとおりです。
$this->assign('fileContent',$ fileContent); //$fileContent には __PUBLIC__「パス定数」文字が含まれています。


ページ出力後は、実際のパス/public/として表示されます。
この間、代入時のbase64暗号化、テンプレート出力時の復号化などを何度も試しましたが、うまくいかないことがわかりました。最後に、仕方なくTpのソースコードを見てみると、表示メソッドの最後のステップで、タグメソッドを呼び出して「Tpパス定数」を実際のパスに置き換えていることが分かりました。 render メソッドの前ではすべてが正常です。

当初、ソース コードを変更して、子供用の靴に関する次のソリューションを実装する予定でした:
上司、これは一時的な解決策ですか、それとも最終的な解決策ですか?
でも、assign()メソッドに判定を加えるのも悪くないと思います
$this->assign('','',false)の場合は内容は置換されず、そのまま出力されます。

その結果、このソースコードを読んだ後、それはそれほど簡単ではなく、変更が大きすぎることがわかりました。

別の子供からの最後の返信は、最終的な解決策を指摘しました:

「内容はここで参照できます: http://www.jb51.net/article/54217.htm(テンプレートの置き換え)

テンプレート置換ルールを使用すると、ページ上のすべての __PUBLIC__ 文字列が置換されます。本当に __PUBLIC__ 文字列をテンプレートに出力する必要がある場合は、次のような置換ルールを追加できます。

コードをコピー コードは次のとおりです:
'TMPL_PARSE_STRING' =>array(
'--PUBLIC--' => '__PUBLIC__', // 新しいルールを使用して /Public string
を出力します )
このように置換ルールを追加した後、__PUBLIC__ 文字列を出力したい場合は、テンプレートに --PUBLIC-- を追加するだけです。他の置換文字列の出力方法も同様です。
このように置換ルールを追加した後、__PUBLIC__ 文字列を出力したい場合は、テンプレートに --PUBLIC-- を追加するだけです。他の置換文字列の出力方法も同様です。

それで、計画がリリースされました:

Tp の設定ファイル config.php で設定します


コードをコピー コードは次のとおりです:
'TMPL_PARSE_STRING' => 配列 (//パス構成

//Timi ファイル パスの復元
'--PUBLIC--' => '__PUBLIC__',
'--APP--' => '__APP__',
'--URL--' => '__URL__',
'--アクション--' => '__アクション__',
'--SELF--' => '__SELF__',
'--情報--' => '__情報__',
'--EXT--' => '__EXT__'
)、
ソースコードを読むときに、「パス定数文字」__ROOT__ を --ROOT--:
に置き換えます。

コードをコピーします コードは次のとおりです。
$fileContent=file_get_contents($filePath); $fileContent=htmlspecialchars(preg_replace('/__(.*?)__/is','--$1--',$fileContent));

次に、以下の図に示すように、テンプレートが解析されるときに TMPL_PARSE_STRING の構成が置き換えられます。

それ以来、この問題は「一時的に」かつ「完全に」解決されました。

この記事が皆さんの ThinkPHP フレームワーク プログラミングに役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。