如何自动加载 smarty 插件

Posted

技术标签:

【中文标题】如何自动加载 smarty 插件【英文标题】:How to auto load a smarty plugin 【发布时间】:2017-01-01 09:54:30 【问题描述】:

我们有一个带有 Smarty 模板引擎的 php 脚本插件,

它可以在带有 plugin_name 的模板文件中使用,但这需要确保它在每个模板文件上,问题是:

有没有办法在脚本加载时自动加载这个插件?

脚本不是开源的,但 Smarty 及其文件(如 Smarty.class.php 等)没有加密。

编辑

我需要做的就是在加载模板文件之前自动加载一个 Smarty 插件(它与数据库的交互很小),这是否可能/仅通过 Smarty 文件实现? (脚本本身是加密的,但Smarty_Compiler.class.php、Smarty.class.php、Config_File.class.php等smarty核心函数都是开源的)

【问题讨论】:

你能说得更具体点吗?这个插件有什么作用? @Borgtex 任何函数,甚至 function test()//Some Action with database ,都可以在像 test 这样的模板中使用,问题是如何在 smarty 加载模板文件之前自动加载它(所以它在模板之前运行显示)。我已经可以通过将 test 放在每个模板文件的顶部来做到这一点。 如果插件在模板显示之前运行并且没有修改它,为什么不在调用模板之前执行你的php文件中的函数呢? @Borgtex 这是一个聪明的插件,PHP脚本代码是加密的 但它的作用是什么?向模板添加内容?,即当您将

plugin_name

放入模板时,输出为

This is the output

?
【参考方案1】:

这取决于您使用的 Smarty 版本。

使用 Smarty 3,您可以:

$smarty = new Smarty();
$smarty->setTemplatesDir(....);
$smarty->addPluginsDir('/path/to/your/plugins');
... stuff.
$smarty->display('template.tpl');

另请参阅:https://www.smarty.net/docs/en/api.add.plugins.dir.tpl

对于 Smarty2,我认为您需要做更多类似的事情 -

https://www.smarty.net/docsv2/en/api.register.function.tpl

或者,您将函数放入 libs/plugins 目录,并使用正确的文件名和函数名...

【讨论】:

以上是关于如何自动加载 smarty 插件的主要内容,如果未能解决你的问题,请参考以下文章

php加载数据时怎么让Checkbox根据值自动选中

jquery.datatable插件如何不自动加载数据?

如何实现无限滚动插件以从数据库自动加载更多页面滚动数据?

在 jQuery 地址插件书签页面上自动加载 div 内的内容

Jquery Super box 自动加载

自动加载简介