2016-09-07 115 views
1

我是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中的模板繼承非常簡約,不能與其他引擎(即我們在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()這樣做會在異常結束被拋出。
  • 不能塊之外的子模板引入代碼。

如果應該有剩餘的問題,請更新您的問題,因爲它是一個有點模糊猜測你想知道到底是什麼。

+0

謝謝你的解釋。我想我得到了一些塊的一部分,但仍然要學習。所以,你的解釋意味着我們不能創建自己的塊,但只能擴展父模板中已經存在的塊?所以,當擴展form_row時,無論我們發佈到塊('field'); ?>會顯示以前的元素? – DpEN

+0

正確的是,您可以在擴展時覆蓋塊(放入新內容或包裝來自父級的內容)或在不擴展時定義可用塊,而不是在同一模板中。 – xtra