2013-10-29 46 views
0

我正在使用TYPO3 6.1和Fluid模板,使用fedext.net工具集。我想要一個包含自動生成內容的標題,如菜單,還有一些管理員定義的內容,如版權。在TYPO3後端的一些常見位置定義這個是有意義的。TYPO3 Fluid:設置頁腳和頁眉的最佳方式是什麼?

目前,我有一個頁面佈局是這樣的:

{namespace v=Tx_Vhs_ViewHelpers} 
<f:layout name="Page"/> 
<div xmlns="http://www.w3.org/1999/xhtml" lang="en" 
    xmlns:v="http://fedext.net/ns/vhs/ViewHelpers" 
    xmlns:f="http://fedext.net/ns/fluid/ViewHelpers"> 

    <div class="grid-container"> 
     <f:cObject typoscriptObjectPath="lib.my_custom_header" /> 

     <f:render section="Content"/> 

     <f:cObject typoscriptObjectPath="lib.my_custom_footer" /> 
    </div> 
</div> 

而在Typo腳本我做了以下抓住並呈現頭內容:

lib.my_custom_header = COA 
lib.my_custom_header { 
    10 = CONTENT 
    10 { 
     table = tt_content 
     select.where = colPos = 0 
     select.languageField = sys_language_uid 
     select.orderBy = sorting 
     select.pidInList = {$config.my_site.header_page_id} 
    } 
    20 = CONTENT 
    20 { 
     table = tt_content 
     select.where = colPos = 1 
     select.languageField = sys_language_uid 
     select.orderBy = sorting 
     select.pidInList = {$config.my_site.header_page_id} 
    } 
} 

這裏是我的FooterPage流體模板

{namespace v=Tx_Vhs_ViewHelpers} 
{namespace flux=Tx_Flux_ViewHelpers} 
<f:layout name="Page"/> 
<div xmlns="http://www.w3.org/1999/xhtml" lang="en" 
    xmlns:v="http://fedext.net/ns/vhs/ViewHelpers" 
    xmlns:flux="http://fedext.net/ns/flux/ViewHelpers" 
    xmlns:f="http://fedext.net/ns/fluid/ViewHelpers"> 

    <f:section name="Configuration"> 

     <flux:flexform id="mypageheader" label="Page Header"> 

      <!-- Grid displayed in the page module --> 
      <flux:flexform.grid> 
       <flux:flexform.grid.row> 
        <flux:flexform.grid.column colPos="0" name="Header Logo" /> 
        <flux:flexform.grid.column colPos="1" name="Header Links" /> 
       </flux:flexform.grid.row> 
      </flux:flexform.grid> 
     </flux:flexform> 
    </f:section> 

    <f:section name="Resources"></f:section> 

    <f:section name="Content"> 
     <div class="grid-100 mobile-grid-100 grid-parent header"> 
      <v:page.content.render column="0"/> 
      <v:page.content.render column="1"/> 
     </div> 
    </f:section> 
</div> 

頁腳代碼幾乎相同(變量名除外)。 這種方法的作品,頁眉和頁腳來自他們的網頁,但如果感覺有點難看。因爲我只能從頁腳頁面呈現內容元素,而不是整個頁面。因此我無法爲頁眉/頁腳數據指定一些自定義包裝。

或者我可以在TypoScript中定義這個包裝器,但是這會在頭文件代碼中傳播頭文件模板代碼。我也可以在頁面佈局文件中定義它(見上文),但在這種情況下,它仍然會與頭文件模板代碼的其餘部分分離(我希望將其放置在頁眉/頁腳流體頁面模板內)。

那麼如何做到這一點最好的方式?

P.S.在此示例項目中,http://bootstrap.typo3cms.demo.typo3.org/頁腳配置爲從某個共享後端元素開始,但無法在TYPO3後端打開該元素,當我嘗試打開它時,TYPO3顯示空白屏幕。同樣的情況發生在我的本地項目副本中。

+0

您可以將TS優化爲'20 <。10' –

+0

@Fedir如何在這之後覆蓋'colPos'的差異? –

+0

'20.select.where = colPos = 1' –

回答

0

儘管我自己找到了解決方案,但我仍然樂於接受更好的解決方案。隨意爲這個主題添加新的答案,投票將顯示更好的方法。我目前的解決方案是如下:

我定義的部分,以使整個頭部的佈局是這樣的:

<f:section name="Header"> 
    <div id="header" class="some"> 
     <div class="custom"> 
      <div class="wrappers"> 
       <f:cObject typoscriptObjectPath="lib.my_header_links" /> 
      </div> 
     </div> 
     <div class="more"> 
      <div class="wrappers"> 
       <f:cObject typoscriptObjectPath="lib.my_main_menu" /> 
      </div> 
      <div class="one-more"> 
       <f:cObject typoscriptObjectPath="lib.my_header_logo" /> 
      </div> 
     </div> 
    </div> 
</f:section> 

然後創建特殊的模板隱藏後端頁:

<f:section name="Configuration"> 
    <flux:flexform id="myPageHeader" label="My Page Header"> 

     <!-- Grid displayed in the page module --> 
     <flux:flexform.grid> 
      <flux:flexform.grid.row> 
       <flux:flexform.grid.column colPos="0" name="Header Links" /> 
       <flux:flexform.grid.column colPos="1" name="Header Logo" /> 
      </flux:flexform.grid.row> 
     </flux:flexform.grid> 
    </flux:flexform> 
</f:section> 

<f:section name="Content"> 
    <f:render partial="Header" section="Header" /> 
</f:section> 

而且在後端創建了一個隱藏頁面。上面的模板在外觀設置中分配給它。

然後在我的TypoScript:

lib.my_header_links = CONTENT 
lib.my_header_links { 
    table = tt_content 
    select.where = colPos = 0 
    select.languageField = sys_language_uid 
    select.orderBy = sorting 
    select.pidInList = #here goes my hidden page id, which feeds the content for header 
} 
lib.my_header_logo < lib.my_header_links 
lib.my_header_logo { 
    select.where = colPos = 1 
} 
lib.my_main_menu = HMENU 
lib.my_main_menu { 
    # here goes main menu config 
} 

最後,我調整了頁面模板來呈現頁眉部分。該模板應該被分配到每一個正常的頁面,這使得網站內容:

<f:section name="Content"> 
    <f:render partial="Header" section="Header" /> 

    <div id="content"> 
     <v:page.content.render column="0" /> 
    </div> 
</f:section> 

現在我的後端用戶可以自定義在後端頭頁頭內容,這內容是跨越它使用的所有頁面填入我的頁面模板。該解決方案有點複雜,但爲後端用戶提供了高級靈活性。

相關問題