[英]TYPO3: Backend Layout Condition in TypoScript
我想根據頁面的后端布局更改元素的呈現方式。
根據后端布局更改流體樣式內容模板的工作方式如下:
[globalVar = TSFE:page|backend_layout = 1][globalVar = TSFE:page|backend_layout = 2]
lib.fluidContent.templateRootPaths.10 = EXT:ds_res/Resources/Private/Templates/ContentTemplates/
[global]
如果是 1 或 2,則使用其他模板。
但是,這僅在 BE 布局直接在頁面上設置而不是從其父級繼承時才有效。
如何解決這個問題?
運行 TYPO3 7.6.15
在 TYPO3 7.5 中,“后端布局”-條件已通過 Typoscript 中的“頁面布局”進行了簡化。 例子:
page.10 = FLUIDTEMPLATE
page.10 {
file.stdWrap.cObject = CASE
file.stdWrap.cObject {
key.data = pagelayout
default = TEXT
default.value = EXT:sitepackage/Resources/Private/Templates/Home.html
3 = TEXT
3.value = EXT:sitepackage/Resources/Private/Templates/1-col.html
4 = TEXT
4.value = EXT:sitepackage/Resources/Private/Templates/2-col.html
}
}
代替:
field = backend_layout
ifEmpty.data = levelfield:-2,backend_layout_next_level,slide
ifEmpty.ifEmpty = default
也許這也適用於您這樣的條件:
[globalVar = TSFE:page|pagelayout = 1]
但是,您不應該使用 [xy] 條件更改使用的模板文件,而更喜歡使用上例中顯示的 CASE。 順便說backend_layout
,每個數字都是backend_layout
的 UID。
由於您無法在需要使用排版的情況下處理繼承的布局。 我的解決方案是這樣的:
page.10 = FLUIDTEMPLATE
page.10 {
templateRootPaths.1 = {$resDir}/Private/Templates
partialRootPaths.1 = {$resDir}/Private/Partials
layoutRootPaths.1 = {$resDir}/Private/Layouts
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 = subpage
# homepage
pagets__homepage = TEXT
pagets__homepage.value = homepage
pagets__subpage = TEXT
pagets__subpage.value = subpage
}
variables {
:
pageLayout = TEXT
pageLayout.data = levelfield:-1, backend_layout_next_level, slide
pageLayout.override.field = backend_layout
// since TYPO3 7 this already is computed by the core and this gives the same:
pageLayout = TEXT
pageLayout.data = pagelayout
:
}
}
避免使用file
以更好地實現 ..RootPaths。
由於我們使用文件中定義的 backendlayouts(包含在 pageTSconfig 中)以pagets__
開頭的鍵名,您也可以使用 backend_layout 記錄的數量。
我使用常量{$resDir}
來定義可以通過簡單方式更改的資源的根。 在站點擴展中,這可能是:
resDir = EXT:site_project1/Resources
我還使用當前活動的頁面布局定義了一個流體變量,以進一步區分模板。
如果您希望每個布局的...RootPaths
不同,您需要使用類似於我選擇的模板名稱的 CASE 對象構建 cObject。
一般而言:如果您的變量中有可用的后端布局,則所有這些都可以在流體模板中處理:您只需要一個起始模板,它調用一個布局,其中對局部的所有進一步調用都由當前布局個性化,例如
<f:render partial="{pageLayout}/header" arguments="{_all}" />
我們使用這個解決方案
page = PAGE
page.10 = FLUIDTEMPLATE
page.10 {
templateName = TEXT
templateName.stdWrap {
cObject = TEXT
cObject {
data = levelfield:-2,backend_layout_next_level,slide
override.field = backend_layout
split {
token = pagets__
1.current = 1
1.wrap = |
}
}
ifEmpty = Index
}
layoutRootPaths {
10 = EXT:yourext/Resources/Private/Layouts
}
partialRootPaths {
10 = EXT:yourext/Resources/Private/Partials
}
templateRootPaths {
10 = EXT:yourext/Resources/Private/Templates
}
}
這種方法是當您在數據庫中沒有后端布局(通過后端制作)但從文件中包含它們時。 由於沒有 uid,因此您可以使用模板名稱。
示例:如果您使用此 PageTS:
mod.web_layout.BackendLayouts {
Blankpage {
title = Blankpage
name = Blankpage
icon = EXT:yourext/Resources/Public/Icons/BackendLayouts/Blankpage.jpg
config {
backend_layout {
colCount = 1
rowCount = 2
rows {
1 {
columns {
1 {
name = Nameofthecolumn
colPos = 0
colspan = 1
}
}
}
2 {
columns {
1 {
name = Nameofthesecondcolumn
colPos = 1
colspan = 1
}
}
}
}
}
}
}
您將需要在 EXT-Templates 中使用名為 Blankpage.html 的 Template.html。
因此,您可以添加更多模板和后端布局,而無需再次接觸 TS。 只需添加 PageTS 和 html 模板。
有一個功能可以避免重復該代碼
page.10 = FLUIDTEMPLATE
page.10 {
templateName = TEXT
templateName.stdWrap.cObject = CASE
templateName.stdWrap.cObject {
key.data = pagelayout
....
在 TYPO3 9.5+ 中,您可以使用排版條件,例如:
[page["backend_layout"] == 'pagets__2']
page.bodyTagCObject.value.wrap = <body id="uid|" class="fullpage">
[end]
編輯:
正如Bernd提到的,只有在您需要真正定義的字段時才使用backend_layout
。 如果您需要計算值(例如,對於從父頁面的backend_layout_next_level
獲取其布局的子頁面),請使用pagelayout
與以下情況:
bodyTagCObject = TEXT
bodyTagCObject.value.field = uid
bodyTagCObject.value.wrap.cObject = CASE
bodyTagCObject.value.wrap.cObject{
key.data = pagelayout
default = TEXT
default.value = <body id="uid|" class="standard">
pagets__2 = TEXT
pagets__2.value = <body id="uid|" class="fullpage">
}
TYPO3 11.x:
[tree.pagelayout == 2]
...
[global]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.