請記住,由於歷史原因,Contao 3中的模板繼承非常簡約,不能與其他引擎(即我們在Contao 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時,無論我們發佈到塊('field'); ?>會顯示以前的元素? – DpEN
正確的是,您可以在擴展時覆蓋塊(放入新內容或包裝來自父級的內容)或在不擴展時定義可用塊,而不是在同一模板中。 – xtra