0

我正在使用fedext.net工具集处理 TYPO3 6.1 和 Fluid 模板。我想要一个带有自动生成内容的标题,比如菜单,还有一些管理员定义的内容,比如版权。在 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 中定义该包装器,但这会将标头模板代码传播到打字稿代码中。我也可以在页面布局文件中定义它(见上文),但在这种情况下,它仍然会与页眉模板代码的其余部分(我想放在页眉/页脚流体页面模板中)分开。

那么如何做到最好呢?

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
}

最后我调整了页面模板以呈现 Header 部分。这个模板应该分配给每个普通页面,呈现网站内容:

<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 回答