Php 评估记录中的细枝功能
我创建了一个bolt扩展,它提供了一个新的twig函数Php 评估记录中的细枝功能,php,design-patterns,twig,bolt-cms,Php,Design Patterns,Twig,Bolt Cms,我创建了一个bolt扩展,它提供了一个新的twig函数foo。twig函数通过以下代码添加到twig框架$this->addTwigFunction('foo','twigFoo') public function twigFoo() { $markup = ' <hr> Foo <hr>'; return new \Twig_Markup($markup, 'UTF
foo
。twig函数通过以下代码添加到twig框架$this->addTwigFunction('foo','twigFoo')代码>
public function twigFoo()
{
$markup = '
<hr>
Foo
<hr>';
return new \Twig_Markup($markup, 'UTF-8');
}
公共函数twigFoo()
{
$markup=
福
”;
返回新的\Twig_标记($Markup,'UTF-8');
}
我的想法是cms的用户可以在内容类型中使用细枝功能。但是,当显示记录体时,细枝函数以普通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);
});
然后可以在模板中使用细枝过滤器“代码”。e、 g:
{{ record.body|escape('code') }}
需要allowtwig:true
中的字段告诉Bolt您相信字段/编辑器允许这样做,例如:
body:
type: html
allowtwig: true
谢谢还有一件事要做:扩展必须实现isSafe()函数并返回true,否则allowtwig标记不会对扩展中的细枝函数求值。