评估记录中的树枝功能


Evaluate twig functions in record

我创建了一个螺栓扩展,它提供了一个新的树枝函数foo。twig 函数通过以下代码$this->addTwigFunction('foo', 'twigFoo');添加到 twig 框架中。

    public function twigFoo()
    {
        $markup = '
        <hr>
            Foo
        <hr>';
        return new 'Twig_Markup($markup, 'UTF-8');
    }

我的想法是,cms的用户可以在内容类型中使用twig功能。但是当显示记录的正文时,twig 函数以纯 HTML 形式可见,例如:{{ foo }}

我认为问题是,树枝模板将在分配记录正文之前呈现。所以我的记录正文不会被树枝评估。有没有人知道如何评估女巫在记录中使用的树枝功能?此问题的最佳做法是什么?

ContentType 中的字段需要allowtwig: true告诉 Bolt 你信任该字段/编辑器允许这样做,例如:

body:
  type: html
  allowtwig: true

问题是 Twig 不会在 Twig 变量中渲染 Twig。您可以创建一个转义函数来执行此操作。无论如何,这可能不是让您的 CMS 用户可以使用 Twig 的最佳主意,因为这使他们能够完全访问您的代码。无论如何,这里有一个可以帮助您的转义函数

$this->app['twig']->getExtension('core')->setEscaper('code', function($twigEnv, $string, $charset) {
    $twig = clone $this->app['twig'];
    $twig->setLoader(new 'Twig_Loader_String());
    return $twig->render($string);
}); 

然后,您可以在模板中使用树枝过滤器"代码"。 例如:

{{ record.body|escape('code') }}