Я пытаюсь создать прут тег, который можно использовать следующим образом:Дать веточка тег, который опирается на другой тег
{% set_domain "zip-recipes" %}
...
...
{% trans "Ingredients" %}
...
{% trans "Ingredients" %}
trans
тег будет необходим домен, установленный в set_domain
теге.
Я создал узел и анализатор для set_domain
, чтобы добавить домен в $context
:
class Project_TransDomain_Node extends \Twig_Node
{
public function __construct($domain, $line, $tag = null)
{
parent::__construct(array(), array('domain' => $domain), $line, $tag);
}
public function compile(\Twig_Compiler $compiler)
{
$compiler
->addDebugInfo($this)
->write('$context[\'trans_domain\'] = "' . $this->getAttribute('domain') . '"')
->raw(";\n")
;
}
}
class TransDomain_TokenParser extends \Twig_TokenParser
{
public function parse(\Twig_Token $token)
{
$parser = $this->parser;
$stream = $parser->getStream();
$domain = $stream->expect(\Twig_Token::STRING_TYPE)->getValue();
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
return new Project_TransDomain_Node($domain, $token->getLine(), $this->getTag());
}
public function getTag()
{
return 'set_domain';
}
}
Однако, я не уверен, как получить доступ, что в node
для trans
.
Я попытался это, но он не оценивает $context['trans_domain']
:
class Project_Trans_Node extends \Twig_Node
{
public function __construct($string, $line, $tag = null)
{
parent::__construct(array(), array('string' => $string), $line, $tag);
}
public function compile(\Twig_Compiler $compiler)
{
$string = $this->getAttribute('string');
$domainExpr = $context['trans_domain'];
$compiler
->addDebugInfo($this)
->write("echo __('${string}','")
->repr('$context["trans_domain"]')
->raw("'")
->raw(";\n")
;
}
}
My bad on tagging # symfony2. Я не использую symfony. – Gezim
Я не знаю, что можно сделать, но вы можете посмотреть код Symfony, чтобы получить вдохновение. Код можно найти в [TwigBridge] (https://github.com/symfony/symfony/tree/v3.1.0/src/Symfony/Bridge/Twig). Из того, что я вижу из этого, он не устанавливает домен в контексте, а непосредственно на узлах передачи ([TranslationDefaultDomainNodeVisitor.php] (https://github.com/symfony/symfony/blob/v3.1.0/src/Symfony/ мост/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php)) – 1ed