小枝テンプレート<span data-id="..">
を呼び出すときに、いくつかの html を自動的にラップしたいとします。{{ product.name }}
したがって、小枝テンプレートで を使用する場合{{ product.name }}
、出力を : にしたいと考えています<span data-type="product" data-id="8" data-prop="name">My product name</span>
。テンプレートの構文を にする必要があるため、小枝のフィルターやマクロを使用することはできません{{ product.name }}
。したがって、エンドユーザー (テンプレート デザイナー) はそれを気にする必要はありません。
これが必要な理由は、小枝テンプレート用のページ上の編集ツールを構築しているためです。そのため、HTML 内からこれらの変数のコンテキストを知る必要があります。
Compiler
が使用する をオーバーライドしようとしましたTwig_Environment
が、twig 変数ノードの出力を変更できないようです。
これどうやってするの?
編集
他のデザイナーが Symfony 2 の外部でこれらのテンプレートを使用するため、構文を使用するためにこれが必要であることを言及したかった{{ product.name }}
のです。ほとんどすべての twig 変数をフロントエンドで編集可能にしたいので、フィルターまたはマクロを使用したソリューションは実際に動作しますが、私が書いているプラットフォームの使いやすさと読みやすさが損なわれます。現在、twig には、私が望むものを実現できるパブリック API はありません。そのため、twig コンパイラをいじっています。これを達成するために必要な Twig 内部の知識がありません。誰かが私を素晴らしい方向に向けることができれば!
更新 2
やりたいことを実現できる場所を見つけました。すべてのGetAttr
ノードは にコンパイルされ$this->getAttribute($someContext, "property")
ます。したがって、コンパイルされた twig テンプレートのサブクラスを変更できれば、目的を達成できます。デフォルトでは、すべての twig テンプレートは から拡張されTwig_Template
ます。この方法を拡張したい。
コンパイルされたすべての twig テンプレートのサブクラスを変更するにはどうすればよいですか?
UPDATE 3
コンパイルされたすべての twig テンプレートに独自の基本クラスを使用する方法を見つけました。小枝環境のオプションとして簡単に設定できます。このリンクを参照してください。明日はうまくいくことを願っています。どのように解決したかについて、適切な回答を投稿します。$this->getAttribute()
が呼び出された後にエスケープが発生するため、エスケープをどのように処理するかはわかりません。