smarty_modifier_inter() が smarty コードを返し、この smarty コードがそれ自体で解析されることを期待していると思いますか? Smarty は修飾子ごとに 1 回だけテンプレートを解析するため、返された smarty タグを解析しません (実際には、元のテンプレート本体ですべての関数を実行すると想定しているため、返された smarty タグは解析しません)。
探しているものを実現する 1 つの方法は、修飾子内に再帰を実装することです。たとえば、修飾子が次のようになっているとします。
function smarty_modifier_inter($string)
{
$html = some_function($string); //This may contain a smarty tag, such as {$page->title|inter}
return $html;
}
次のように変更できます。
function smarty_modifier_inter($string)
{
$html = some_function($string); //This may contain a smarty tag, such as {$page->title|inter}
if (preg_match("/".preg_quote("{$")."/", $html)) { //A very quick and dirty way to see if there are any smarty variables within your template
$html = smarty_modifier_inter($html); //This may contain a smarty tag, such as {$page->title|inter}
}
return $html;
}
これにより、smarty 変数が含まれなくなるまで、文字列に対して smarty_modifier_inter が繰り返し実行されます。明らかに、これは無限ループの影響を非常に受けやすいので、注意して使用してください!
単一レベルの再帰があることが確実な場合は、データに対して関数を最大 1 回だけ実行できます。