dmz*_*rsk 0 php templates twig
我是使用Twig的新手,但我对django模板有很好的把握.
我的网站不是Symfony项目,但我使用Twig作为模板语言.
我需要的是在我的网站的每个页面上显示"最新新闻"块.将逻辑放入每个控制器实际上不是一种选择.
从我的django经验来看,我希望创建一个自定义标签并在我的基本模板中呈现它.Django有所谓的自定义" 包含标签 ".执行某些python逻辑并通过另一个模板呈现其结果的标记.
我在Twig中读到了自定义标签.我成功地为我的闪亮新{% latest_news 5 %}
标签创建了一个解析器.但是如何在我的PHP脚本中执行LatestNews_Node
?我读了一些Twig源代码.它们用于$compiler->write(...)
执行PHP代码.这是在标签中执行自定义PHP的唯一方法吗?
以及如何通过另一个模板呈现它并在结尾返回结果?
我试图寻找一个没有结果的工作示例
你这里走错了路.你可以使用新标签做你想做的事情,但似乎没必要.
只需创建一个新函数并调用它:
{{ latest_news(5) }}
Run Code Online (Sandbox Code Playgroud)
class MyTwigExtension extends Twig_Extension
{
public function latest_news ($limit)
{
$templateVariables = array(
'latestNews' => SomeClass::getLatestNews($limit)
);
// you would want to make this in a factory / a separate view class
$loader = new Twig_Loader_Filesystem('/your/template/dir');
$twig = new Twig_Environment($loader);
// display actual sub-template
$template = $twig->loadTemplate('your_existing_template.twig');
return $template->render($templateVariables);
}
public function getFunctions ()
{
return array(
'latest_news' => new Twig_Function_Method($this, 'latest_news', array('is_safe' => array('html')))
);
}
public function getName ()
{
return 'my-twig-extension';
}
}
Run Code Online (Sandbox Code Playgroud)
您现在必须创建所有的Twig实例,如下所示:
$loader = new Twig_Loader_Filesystem('/your/template/dir');
$twig = new Twig_Environment($loader);
$twig->addExtension(new MyTwigExtension());
Run Code Online (Sandbox Code Playgroud)
所以我认为您可能想要创建一个工厂,为您创建实例(具有扩展的所有依赖项)或创建一个自定义View
类,它在内部完成所有这些.
归档时间: |
|
查看次数: |
2818 次 |
最近记录: |