smarty - 在加载之前过滤模板路径

smarty - filter template paths before they get loaded

我正在为一个使用 Smarty2 实现的相当复杂的项目编写一个插件(相当老派,是的,这不是我的决定)。我必须更改一些模板,但只有数百个模板中的两个或三个(例如生成页面导航栏的模板)。问题是: - 他们没有任何我需要的钩子或变量 - 我不能修改它们(因为我想让整个东西都可以更新) 但是我可以访问 $smarty 对象并且可以使用它的方法,例如 assign.

是否有可能在模板 url 显示之前对其进行过滤?我脑子里想的是

$smarty->replaceUrl('templates/navbar.tpl', 'myplugin/mynavbar.tpl');

或者你们中的任何人有任何其他建议我可以如何解决这个问题?我知道我可以使用 register_outputfilter 并通过一些字符串操作插入我的代码,但这显然是一个糟糕的解决方案。

我自己找到了一个很有说服力的方案

array_unshift($smarty->template_dir, $myTemplatePath);

在我的 $myTemplatePath 中,我保存了我要替换的每个模板的版本。破案了。