评估记录中的树枝功能

时间:2016-03-11 18:59:35

标签: php design-patterns twig bolt-cms

我创建了一个螺栓扩展,它提供了一个新的树枝函数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 }}

我认为问题是,枝条模板将在分配记录体之前呈现。因此,我的记录正文将不会被树枝评估。有谁知道如何评估女巫在记录中使用的枝条功能?这个问题的最佳实践是什么?

2 个答案:

答案 0 :(得分:4)

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

body:
  type: html
  allowtwig: true

答案 1 :(得分:1)

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

然后你可以使用树枝过滤器&#34;代码&#34;在你的模板中。 e.g:

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