评估记录中的树枝功能

Evaluate twig functions in record

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

    public function twigFoo()
    {
        $markup = '
        <hr>
            Foo
        <hr>';

        return new \Twig_Markup($markup, 'UTF-8');
    }

我的想法是,cms 的用户可以在内容类型中使用 twig 功能。但是当显示记录的主体时,树枝函数显示为普通 HTML 例如:{{ foo }}

我认为问题在于,twig 模板将在分配记录正文之前呈现。所以我记录的正文不会被树枝评估。有谁知道如何评估树枝函数 在记录中的使用?这个问题的最佳实践是什么?

问题是 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);
}); 

然后您可以在模板中使用 twig 过滤器 "code"。例如:

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

ContentType 中的字段需要 allowtwig: true 告诉 Bolt 你相信 field/editor 允许这样做,例如:

body:
  type: html
  allowtwig: true