несколько аспектов, почему вы не должны работать таким образом:
предпочитайте .templateName
вместо .template.file
, это более гибко, так как вы можете иметь несколько выходов (.html
, .xml
, .json
, ...)
поле layout
по умолчанию не наследуется.
вам необходимо определить значение поля для каждогоpage
Условия TS приводят к нескольким кэшированным версиям опечатки
, бэкэнд не представляет макет внешнего интерфейса для ваших редакторов
Альтернатива:
используйте поля backend_layout
и backend_layout_next_level
следующим образом:
templateName = TEXT
templateName.cObject = CASE
templateName.cObject {
key.data = levelfield:-1, backend_layout_next_level, slide
key.override.field = backend_layout
#Default Template
default = TEXT
default.value = Default
pagets__startpage = TEXT
pagets__startpage.value = Startpage
pagets__simple = TEXT
pagets__simple.value = Simple
}
или используйте значениеdirect:
templateName = TEXT
templateName {
value = default
override.cObject = TEXT
override.cObject {
data = levelfield:-1, backend_layout_next_level, slide
override.field = backend_layout
}
}
Макеты бэкэнда определены на странице TSconfig (можно развернуть из EXT:my_site_ext/Configuration/TSconfig/page.tsconfig
)
## define backend-layouts
mod.web_layout.BackendLayouts {
startpage {
title = Startpage Layout
config {
backend_layout {
colCount = 4
rowCount = 4
rows {
:
}
}
}
}
simple {
title = Simple Layout
config {
backend_layout {
colCount = 2
rowCount = 2
rows {
:
}
}
}
}
default {
title = Default Layout
config {
backend_layout {
colCount = 4
rowCount = 3
rows {
:
}
}
}
}
}
, если вы хотите, чтобы поле layout
адаптировало общий шаблон внешнего интерфейса, который вынужно перенести эту информацию в шаблон жидкости:
variables {
:
layout = TEXT
layout.field = layout
:
}
Затем вы можете рассмотреть макет в ваших файлах шаблона (или макета):
<f:if condition="{layout} == 1">
<then><f:render partial="header1" /></then>
<else><f:if condition="{layout} == 2">
<then><f:render partial="header2" /></then>
<else><f:render partial="header0" /></else></fi>
</else>
</fi>
, а также здесь вы можете использовать значение немедленно (убедитесь, что все партиалы доступны):
<f:render partial="header{layout}" />
Как правило, эти два поля можно использовать несколькими способами, вот некоторые другие применения:
typoscript:
page.10.template {
templateName = Default
variables {
beLayout = TEXT
beLayout.data = levelfield:-1, backend_layout_next_level, slide
beLayout.override.field = backend_layout
feLayout = TEXT
feLayout.field = layout
:
}
}
1.
вы используете статический шаблон, а BE- и FE-Поля макета - это переменные флюида, которые определяют дальнейший рендеринг в флюиде:
в Templates / Default.html:
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true">
<f:layout name="{beLayout}" />
<f:section name="Main">
<f:if condition="{feLayout} == 1">
<div class="col-visual">{content_visual->f:format.raw()}</div>
</f:if>
<div class="col-main">{content_main->f:format.raw()}</div>
<f:if condition="{feLayout} == 2">
<div class="col-infobox">{content_infobox->f:format.raw()}</div>
</f:if>
</f:section>
2.
в шаблонах / Default.html:
<f:render partial="{beLayout}" section="{feLayout}" arguments="{_all}" />
3.
в шаблонах / Default.html: