我希望拦截CMS功能并在每次调用时记录它的参数。即我想要拨打t()
的所有电话。问题是,在CMS核心中有1875个调用t()
,因此编辑调用它的代码是不可行的。另一方面,我可以在第一次函数调用之前包含我的代码片段。
我已经看过How to intercept PHP function call in my script?,但它接受的答案假设用户可以通过调用新功能来替换直接呼叫。那不是我的情况。链接的文章是关于拦截方法,所以它似乎也不适用。
其他一些Drupal函数,如variable_set()
,使用全局数组,所以I was able to plug into them by replacing global array with an object。遗憾的是,t()
仅使用global $language
,并且此变量不是针对函数参数搜索的数组,因此这种方法不可能我需要本机PHP解决方案
有没有办法拦截实际的函数调用,它们的编写方式?现在我实际上攻击了t()
,但我真的,真的想要避免它。遗憾的是,我在网上找到的所有解决方案似乎都应该与自己的代码进行交互,而不是与其他人在框架中编写的代码进行交互。
最后但并非最不重要:我可以在开发机器上安装其他软件。它的Ubuntu服务器。因此,如果可以使用任何PHP插件,我想知道这一点。我会更喜欢不需要的解决方案,但我可以忍受它。
此问题与Drupal Answers上的How to make strings from templates translatable on all pages they appear?有关,但并非重复。现在,我正试图找到一种方法来攻击Localization Client模块的function _l10n_client_page_strings()
。但是我确信实际的函数调用拦截会让很多人感兴趣。
回答this comment:嗯,我相信这是一个非常有趣的PHP问题,但我的问题也有实用的目的。
要翻译网站,传统上会有:
使用Localization Client程序应该是这样的:
更简单,更快速,更不容易出错。该模块唯一的问题是它不收集页面上实际使用的字符串,但使用的查询"将无法可靠地运行" (他们自己的评论),所以:
这就是为什么我试图用一些效果较慢的东西来修补_l10n_client_page_strings()
功能,但也直接做了它的工作。而且我知道模板文件中的一些调用可能发生得太晚了,但是当我达到它时,我愿意跨越那个桥梁。现在我需要一种可靠的方法来实际了解这些调用,而不会破坏任何东西,除了模块我试图按照它应该的方式工作。