TYPO3 Fluid: как лучше всего настроить нижний и верхний колонтитулы?

Я работаю с шаблонами 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. Я также могу определить его в файле макета страницы (см. Выше), но в этом случае он все равно будет отделен от остального кода шаблона заголовка (который я хочу разместить внутри шаблона страницы с изменяемым заголовком / нижним колонтитулом).

Итак, как это сделать наилучшим образом?

P.S. В этом примере проекта http://bootstrap.typo3cms.demo.typo3.org/ нижний колонтитул настроен для перехода из какого-то общего элемента бэкэнда, но я не могу открыть этот элемент в бэкэнде TYPO3, TYPO3 показывает пустой экран, когда я пытаюсь его открыть. То же самое происходит в моей локальной копии этого проекта.


person Anton Boritskiy    schedule 29.10.2013    source источник
comment
Вы можете оптимизировать TS, как 20 < .10   -  person Fedir RYKHTIK    schedule 07.11.2013
comment
@Fedir, как после этого переопределить colPos разницу?   -  person Anton Boritskiy    schedule 07.11.2013


Ответы (1)


Несмотря на то, что я нашел решение самостоятельно, я все еще открыт для лучшего. Не стесняйтесь добавлять новые ответы в эту ветку, голосование покажет лучший подход. Мое текущее решение ниже:

Я определил партиал для рендеринга всего макета заголовка следующим образом:

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

Затем я создал специальный шаблон для скрытой back-end страницы:

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

Теперь мои серверные пользователи могут настраивать содержимое заголовка на странице заголовка в серверной части, и это содержимое заполняется на всех страницах, которые используют мой шаблон страницы. Решение немного сложное, но обеспечивает повышенную гибкость для внутренних пользователей.

person Anton Boritskiy    schedule 21.11.2013