2012-02-29 2 views
2

Я хотел бы знать, как визуализировать «шаблон внутри другого шаблона». У меня есть такой шаблон:Twig визуализировать шаблон внутри шаблона

[...] 
{% autoescape false %} 
    {{ page.content }} 
{% endautoescape %} 
[...] 

«page.content» может быть оценен с некоторой веточкой! Например, он может содержать некоторые вызовы, как

{{ myObject.poperty }} 

или даже

{% render "MyBundle:Bundle:myAction" with {'title': myObject.title} %} 

По умолчанию, содержание page.content не анализируется Twig. Так что я сделал расширение и я могу разобрать вызовы как {{}} page.content

Мое расширение выглядит следующим образом:

$loader  = new \Twig_Loader_String(); 
$this->environment->setLoader($loader); 

$template = $this->environment->loadTemplate($string); 
$output  = $template->display(array('myObject' => $object)); 

Но я до сих пор не в состоянии rendre второго рода вызова {% делают ....%}

Я попытался сделать:

$stream  = $this->environment->tokenize($string); 
$nodes  = $this->environment->parse($stream)->getNode('body')->getNode(0); 
$output  = $this->environment->compile($nodes); 

Но я застрял ...

Знаете ли вы, как я мог бы отобразить значение «page.content»?

ответ

1

Так что я создал расширение прут PHP, и одно решение, кажется:

public function parsingTwig($source, $context) 
    { 
     $stream  = $this->env->tokenize($source); 
     $iterator = $this->env->parse($stream)->getNode('body')->getIterator(); 

     while ($iterator->valid()) 
     { 
      $current = $iterator->current(); 
      $output = $this->env->compile($current); 
      eval($output); 
      $iterator->next(); 
     } 
} 

Вам нужно определить некоторые функции, такие как «GetAttribute» или «getContext». Эти функции можно найти в классе шаблонов twi ...

Смежные вопросы