1
私はpreg_matを使用してテンプレート内のif文を置き換えています。私はpreg_match_allからの試合に出て試合の結果を得ようとしていて、preg_replaceを使っていますが、オフセットエラーが出ています。preg_replaceでのpreg_match_all結果の使用に関する問題
構文に関するご意見をいただければ幸いです。また、これについてもっと良い方法があるかどうか不思議です。
コードサンプル:
public function output() {
$output = file_get_contents($this->file);
foreach ($this->values as $key => $value) {
$tagToReplace = "[@$key]";
$output = str_replace($tagToReplace, $value, $output);
$dynamic = preg_quote($key);
$pattern = '%\[if @'.$dynamic.'\](.*?)\[/if\]%'; // produces: %\[if @username\](.*?)\[/if\]%
if ($value == '') {
$output = preg_replace($pattern, "", $output);
} else {
preg_match_all($pattern, $output, $if_match);
$output = preg_replace("%\[if @".$dynamic."\]%", "", $if_match[0][0]);
$output = preg_replace("%\[/if]%", "", $if_match[0][0]);
}
テンプレートを除く:
[if @username] <p>A statement goes here and this is [@username]</p> [/if]
[if @sample] <p>Another statement goes here</p> [/if]
コントローラーの抜粋:
$layout->set("username", "My Name");
$layout->set("sample", "");
現時点では、動作中のテンプレートエンジンのみを使用することを検討する必要があります。 (以前のpreg_replace_callbackの手法は賢明ではありませんでしたが、この段階的な文字列のマングリングよりも意味があります) – mario
ありがとうございました - これは私が次に試してみようとしていたものです。これは、履歴書用の非常に小さなテンプレートエンジンです。私は十分にスマイを知っていますが、私は部分的にこれを学習経験としてやっています。 – jsuissa