2016-09-07 4 views
1

私はcontao開発の新人です。私がしようとしているのは、私のテンプレートでカスタムブロックを拡張することです。だから、私の質問は:テンプレートブロック継承Contao

テンプレートでカスタムブロックを作成することは可能ですか?ドキュメントhttps://docs.contao.org/books/manual/3.5/en/04-managing-content/templates.html

あり、それが書かれている部分テンプレートの継承であり、私たちは、たとえばカスタムブロックを継承できると述べている:

<?php $this->block('name_of_the_block'); ?> 

    // Block content 

<?php $this->endblock(); ?> 

任意のContaoの開発者はここにある場合。私を助けてください。それは本当に感謝します。 〜あなたが他の重要な点を列挙することができれば、それは役に立つでしょう。ありがとうございました。

答えて

4

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()を使用するものを導入することはできません

  • 例外で終了しますそうすることでスローされます。
  • あなたは、子テンプレートのブロックの外側でコードを導入することはできません。

質問に残りがなければならない場合、あなたが知りたい正確に何を推測するために少し曖昧であるとして、あなたの質問を更新してください。

+0

ありがとうございます。私はブロックのいくつかの部分を取得すると思うが、まだ学ぶ。したがって、あなたの説明は、独自のブロックを作成することはできませんが、親テンプレートの既存のものだけを拡張することを意味します。したがって、form_rowを私たちが投稿したものを何でも拡張すると、 block( 'field'); ?>は前の要素を上書きして表示されますか? – DpEN

+0

正しい場合は、拡張するときにブロックをオーバーライドする(新しいコンテンツを置く、または親からコンテンツをラップする)か、または同じテンプレート内で拡張しないときに使用可能なブロックを定義することができます。 – xtra