Contao 3のテンプレート継承は、歴史的な理由からかなり単純であり、他のエンジン、すなわち、Contag 4に移行している小枝の柔軟性とは比較されません。
あなたの質問にお答えします: テンプレート内に独自のブロックを定義し、子テンプレートで上書きすることができます。この動作を確認するには 実際には、すべてのブロックがその名の「ルート」テンプレートで「作成」し、その後上書きされるが、例えばフォーム要素のテンプレートを参照してくださいform_row.html5のコードを参照してください。
// ... code omitted, refer to linked file.
<div class="<?= $this->prefix ?><?php if ($this->class) echo ' ' . $this->class; ?>">
<?php $this->block('label'); ?>
<?php $this->endblock(); ?>
<?php $this->block('field'); ?>
<?php $this->endblock(); ?>
</div>
// ... code omitted, refer to linked file.
ブロックは、ここで紹介してform_radio.html5でオーバーライドされています
<?php $this->extend('form_row'); ?>
<?php $this->block('field'); ?>
// ... code omitted, refer to linked file.
<?php $this->endblock(); ?>
あなたが見ることができるように、ブロックfield
が上書きされているとlabel
ではありません。 もう一度このブロックを別のテンプレートで上書きすることも、別のテンプレートform_radio.html5
でラベルを上書きすることもできます。上述したように
、注意すべきいくつかの制限があります:あなたは、子テンプレートで新しいブロック($this->extend()
を使用するものを導入することはできません
- 例外で終了しますそうすることでスローされます。
- あなたは、子テンプレートのブロックの外側でコードを導入することはできません。
質問に残りがなければならない場合、あなたが知りたい正確に何を推測するために少し曖昧であるとして、あなたの質問を更新してください。
ありがとうございます。私はブロックのいくつかの部分を取得すると思うが、まだ学ぶ。したがって、あなたの説明は、独自のブロックを作成することはできませんが、親テンプレートの既存のものだけを拡張することを意味します。したがって、form_rowを私たちが投稿したものを何でも拡張すると、 block( 'field'); ?>は前の要素を上書きして表示されますか? – DpEN
正しい場合は、拡張するときにブロックをオーバーライドする(新しいコンテンツを置く、または親からコンテンツをラップする)か、または同じテンプレート内で拡張しないときに使用可能なブロックを定義することができます。 – xtra