我创建了一个数据模型,其中包含办公室地址的纯文本输入字段。在我的相关 Silverstripe 模板中打印数据时,我想执行与 nl2br($OfficeAddr)
相同的操作。据我所知,他们的模板系统不支持此类功能。
我错过了什么吗?有任何推荐的解决方法吗?
最佳答案
在 Silverstripe 3 中,最好通过创建一个 DataExtension
class 来实现。 (而不是覆盖类)。 (注意:这在 2.4.x 中也是可能的,但代码会大不相同。)
创建一个名为 TextFormatter
的新类,它扩展了 Extension
:
class TextFormatter extends Extension {
public function NL2BR() {
return nl2br($this->owner->value);
}
}
在配置中指定 Text
类应该使用您的全新类进行扩展。这可以在您的 _config.php
文件或(最好)在 YAML 文件中完成。
如果您还没有,请在 mysite/_config/extensions.yml
中创建一个包含以下内容的新文件(或者您可以将其附加到现有文件中):
Text:
extensions:
['TextFormatter']
这只是说“用 TextFormatter
类扩展 Text
类”,这将使我们的新 NL2BR
函数在所有 上可用文本
对象。
现在,在您的模板中,您只需调用 $OfficeAddr.NL2BR
,输出将在输出之前通过您的函数运行。
请注意,我假设您的模型使用 Text
作为字段类型,而不是像之前的答案所假设的那样使用 HTMLText
。如果您正在使用 HTMLText
,您可以通过适本地更改 extensions.yml
文件来简单地扩展该类。
关于php - 是否可以在 Silverstripe 模板变量上运行一个函数来格式化输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4917596/