0

私は TYPO3 6.1 と Fluid テンプレートを使用して、fedext.netツール セットを使用しています。メニューなどの自動生成されたコンテンツと、著作権などの管理者定義のコンテンツを含むヘッダーが必要です。TYPO3 バックエンドの共通の場所でこれを定義することは理にかなっています。

現在、次のようなページ レイアウトがあります。

{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>

そしてTyposcriptでは、ヘッダーのコンテンツを取得してレンダリングするために次のことを行っています:

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 内でそのラッパーを定義することもできますが、これはヘッダー テンプレート コードを TypoScript コード全体に広げます。ページ レイアウト ファイル (上記を参照) で定義することもできますが、その場合でも、残りのヘッダー テンプレート コード (ヘッダー/フッターの流動的なページ テンプレート内に配置したい) から分離されます。

では、どうすれば一番うまくいくのでしょうか?

PS このサンプル プロジェクトhttp://bootstrap.typo3cms.demo.typo3.org/では、フッターはいくつかの共有バックエンド要素から移動するように構成されていますが、TYPO3 バックエンドでその要素を開くことができません。TYPO3 を開こうとすると空の画面が表示されます。それ。そのプロジェクトのローカル コピーでも同じことが起こります。

4

1 に答える 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>

バックエンド ユーザーは、バックエンドのヘッダー ページのヘッダー コンテンツをカスタマイズできるようになりました。このコンテンツは、ページ テンプレートを使用するすべてのページに入力されます。このソリューションは少し複雑ですが、バックエンド ユーザーに高度な柔軟性を提供します。

于 2013-11-21T11:50:05.000 に答える