2017-01-13 2 views
0

Я хотел бы изменить способ отображения элементов в зависимости от компоновки бэкэнд страницы.
Изменение шаблона контента в стиле жидкости в зависимости от компоновки бэкэнд работает следующим образом:TYPO3: Условие компоновки backend в 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, а затем используйте другие шаблоны.

Однако, это работает только если макет В установлен непосредственно на странице и не, когда он унаследовал от своих родителей.
Как это исправить?

Запуск TYPO3 7.6.15
Спасибо.

+0

Посмотрите на этот вопрос: http://stackoverflow.com/questions/39614470/typoscript-condition-backend-layout-with -slide – bschauer

+0

@bschauer Я тоже видел этот пост, но как я могу использовать 'lib.backendLayout' внутри условия? '[lib.xx = 1]', похоже, не работает ... – Norman

ответ

2

В TYPO3 7.5 "Backend Layout" -Conditions упрощен с помощью "pagelayout" в 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] 

Однако, вы должны не изменить используемый файл шаблона с помощью [ху ] - условия и preffer с использованием CASE, показанного в примере выше. Каждое число - это идентификатор backend_layout, кстати.

+1

+1 для pagelayout и упрощения. К сожалению, '[globalVar = TSFE: page | pagelayout = 1]' не работает ... – Norman

0

Поскольку вы не можете обрабатывать унаследованные макеты в условиях, вам необходимо использовать typoscript. Мое решение заключается в следующем:

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 

     : 
    } 
} 

Избегайте использования file для более эффективной реализации с ..RootPaths.

Поскольку мы используем backendlayouts, определенные в файлах (которые включаются в pageTSconfig), имена ключей, начинающиеся с pagets__, вы также можете использовать номера записей backend_layout.

Я использую константу {$resDir}, чтобы определить корень ресурсов, которые можно легко изменить. В siteextension это может быть:

resDir = EXT:site_project1/Resources 

Я также определить переменную жидкости с текущей активной макет страницы для дальнейшей дифференциации в шаблонах.

Если вы хотите, чтобы ...RootPaths отличался для каждого макета, вам нужно построить cObject с CASE obejct, подобным моему выбору имени шаблона.

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

<f:render partial="{pagelayout}/header" arguments="{_all}" /> 
1

Мы используем это решение

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

этот подход, когда у вас нет Backendlayouts в БД (сделанные через бэкэнд) бушель t включить их из файлов. Поскольку нет uid, вы идете по templatename.

Пример: Если вы используете этот 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 
         } 
        } 
       } 

      } 
     } 
    } 
} 

Вам понадобится template.html с именем Blankpage.html внутри вашего EXT-шаблонов.

Итак, вы можете добавить еще шаблоны и Backendlayouts, не касаясь TS снова. Просто добавьте pageTS и html-шаблон.

1

Существует функция доступна, которая позволяет избежать необходимости этот код дублируется

page.10 = FLUIDTEMPLATE 
page.10 { 
    templateName = TEXT 
    templateName.stdWrap.cObject = CASE 
    templateName.stdWrap.cObject { 
     key.data = pagelayout 
     .... 
Смежные вопросы