TYPO3 Fluid: Как лучше всего настроить нижний колонтитул и верхний колонтитул?
Я работаю с шаблонами TYPO3 6.1 и Fluid, используя набор инструментов https://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 отображается пустой экран. Это. То же самое происходит в моей локальной копии этого проекта.
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>
Затем я создал специальный шаблон для скрытой серверной страницы:
<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>
Теперь пользователи моего бэкэнда могут настроить содержимое заголовка на странице заголовка в бэкенде, и этот контент заполняется на всех страницах, использующих мой шаблон страницы. Решение немного сложное, но обеспечивает расширенную гибкость для внутренних пользователей.