php - 是否可以在 Silverstripe 模板变量上运行一个函数来格式化输出?

标签 php templates function silverstripe

我创建了一个数据模型,其中包含办公室地址的纯文本输入字段。在我的相关 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/

相关文章:

php - 动态绑定(bind)Jquery回调函数

c++ - 为什么不从构造函数推断模板参数?

Python 在函数内使用 For 循环

php - 跳过循环错误? (PHP)

php - Docker:nginx+mariadb+php+redis的docker-compose.yml文件

php - cakephp 从数据库中获取数据

c++ - 提供对 SoA 的 AoS 访问

c++ - 我如何创建一个模板是特定类型的编译时断言?

Jquery检查元素是否隐藏(连续)

python - 如何将整数序列作为参数传递给 python 函数?