编写依赖于另一个标签的twig标签

时间:2016-06-03 19:14:22

标签: php twig

我正在尝试创建一个可以按如下方式使用的树枝标记:

class MaterialInventoryManager(models.Manager):
    def total_active_inventory(self):
        return self.get_query_set().annotate(total_inventory=Sum('inventory__quantity')).filter(is_active = True)


class Material(models.Model):
    version = IntegerVersionField( )
    code = models.CharField(max_length=30)
    name = models.CharField(max_length=30)
    description = models.TextField(null=True, blank=True)
    materialuom = models.CharField(max_length=1,
                              choices=UOM_CHOICES)
    creation_time = models.DateTimeField(auto_now_add=True, blank=True)
    total_inventory =  MaterialInventoryManager()
    objects = MaterialInventoryManager()


@with_author 
class Inventory(models.Model): 
    material =  models.OneToOneField('item.Material',null=True, blank=True)
    # material_UOM =  models.OneToOneField('item.UOM_BINUOM',null=True, blank=True)
    warehouse_Bin =  models.ForeignKey(WarehouseBin)
    is_active = models.BooleanField(default=True)
    quantity =  models.DecimalField(max_digits=8, decimal_places=5)
    creation_time = models.DateTimeField(auto_now_add=True, blank=True)

{% 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']

1 个答案:

答案 0 :(得分:0)

Symfony已经有trans_default_domain标签(自2.1起),只需使用它。

  

您可以使用单个标记为整个Twig模板设置翻译域:

     

{% trans_default_domain "app" %}

     

请注意,这仅影响当前模板,而不影响任何"包含"模板(为了避免副作用)。