この記事では、ThinkPhpテンプレートのソリューションについて、そのまま出力を直接解析せずに説明します。参照のためにそれを共有してください。詳細は次のとおりです。
1。質問:
私は最近ThinkPhpテンプレートを学んでいますが、テンプレートページはそのままであることがわかりました。ハード検索の後、私はついに解決策を見つけました。
2。解決策:
多くの人々が同じ問題に遭遇しました。変数に割り当てられた文字列に含まれる__ root__、__public__、および__app__の文字は、テンプレートに表示されると実際のパスに置き換えられます。つまり、この問題は、TIMIファイル管理システムを作成するときに発見されました。
ファイルからソースコードを読んでページに出力し、パス文字がTPである限り、実際のパスに置き換えられることを見つけます。
例えば:
コードコピーは次のとおりです。$ this-> assign( 'filecontent'、$ filecontent); // $ filecontentには、__public__「パス定数」文字が含まれています。
ページはReal Path /public /として出力されます。
この期間中、私はベース64暗号化など、テンプレートを出力するときにそれをデコードするなど、多くのことを試しましたが、機能しないことがわかりました。最後に、TPのソースコードを見ずにはいられませんでしたが、表示方法の最後のステップでは、「TPパス定数」をTAGメソッドを呼び出すことで実際のパスに置き換えたことがわかりました。レンダリング方法の前に正常です。
私はもともと、ソースコードを変更して、次の子供の靴の要件を実現することを計画していました。
ボス、これは一時的な解決策ですか、それとも最終的な解決策ですか?
しかし、assile()メソッドに判断を追加するのは良いことだと思います。
$ this-> assign( ''、 ''、false)の場合、コンテンツは置き換えられず、出力はそのままになります。
その結果、このソースコードを読んだ後、それはそれほど簡単ではなく、変更が大きすぎることがわかりました。
別の子供の靴からの最後の返信は、最終的な解決策を指摘しました。
「ここでコンテンツを参照できます://www.vevb.com/article/54217.htm(テンプレート置換)
テンプレートの交換ルールを使用すると、ページ上のすべての__public__文字列が置き換えられます。 __public__文字列をテンプレートに出力する必要がある場合は、たとえば、交換ルールを追加できます。
次のようにコードをコピーします: 'tmpl_parse_string' => array(
' - パブリック - ' => '__public__'、//新しいルールを使用して出力/パブリック文字列を使用します
))
この方法で交換ルールを追加した後、__Public__文字列を出力する場合は、テンプレートに-publicを追加するだけで、他の交換文字列の出力方法も同様です。
この方法で交換ルールを追加した後、__Public__文字列を出力する場合は、テンプレートに-publicを追加するだけで、他の交換文字列の出力方法も同様です。
したがって、計画は発表されました:
TPの構成ファイルconfig.phpで構成
コードを次のようにコピーします: 'tmpl_parse_string' => array(// path configuration
// TIMIファイルパスを復元します
' - パブリック - ' => '__public__'、
'-app--' => '__app__'、
'-url-' => '__url__'、
'-action-' => '__action__'、
'-Self-' => '__Self__'、
' - info--' => '__info__'、
'-ext-' => '__ext__'
)、、
ソースコードを読むときは、「パス定数文字」を交換します__ROOT__ AS -ROOT--:
コードコピーは次のとおりです。$ filecontent = file_get_contents($ filepath);
$ filecontent = htmlspecialchars(preg_replace( '/__(.*?)__/ is'、 ' - $ 1-'、$ filecontent));
次の図に示すように、テンプレートが解析されたときに、TMPL_PARSE_STRING構成が交換されます。
したがって、この問題は「一時的に」、「完全に」解決されました。
この記事が、すべての人のThinkPHPフレームワークプログラミングに役立つことを願っています。