Получить имя макета во внешнем интерфейсе — fluid typo3

#typo3 #flux #fluid-layout #extbase

#typo3 #flux #fluid-layout #extbase

Вопрос:

У меня есть сайт fluid typo3 с одностраничным макетом.Одно меню имеет разную компоновку.Как получить выбранное имя макета в моем основном шаблоне?

main.html

  <v:page.menu levels="1" as="sections">
                    <f:for each="{sections}" as="section" iteration="itemIteration">

     <f:debug>{sections}</f:debug>
    </f:for>
                </v:page.menu>
  

sub.html

 <f:layout name="Pagewithnav" />
    <f:section name="Configuration">
        <flux:form id="subnav" icon="{f:uri.resource(path: 'Icons/Page/logo.png')}" label="Sub Navigation">
            <!-- Insert fields, sheets, grid, form section objects etc. here, in this flux:form tag -->
        </flux:form>
        <flux:grid>
            <!-- Edit this grid to change the "backend layout" structure -->
            <flux:grid.row>
                <flux:grid.column colPos="0" colspan="4" name="main" label="Navigation wrapper" />
            </flux:grid.row>
            <flux:grid.row>
                <flux:grid.column colPos="1" colspan="4" name="main" label="Main wrapper" />
            </flux:grid.row>
        </flux:grid>
    </f:section>
    <f:section name="Main">
        <div class="sub_nav">
           <div class="container">
               <v:content.render column="0"/>
           </div>
        </div>
        <div class="container">
            <v:content.render column="1"/>
        </div>
    </f:section>
  

Комментарии:

1. Если вам нужен внутренний макет страницы, в обычном случае вы можете получить его из массива $GLOBALS [‘TSFE’]. Но здесь речь идет о Flux, верно?? Но внутри расширения поставщика шаблонов нужно ли знать выбранный макет бэкэнда.? Пожалуйста, объясните ваши требования более точно.

2. @AnuBhuvanendranNair Мне нужно имя шаблона в шаблоне fluid flux. Поскольку я использую расширение поставщика, я не могу использовать массив $GLOBALS [‘TSFE’]

Ответ №1:

Это зависит от того, что именно вы подразумеваете под «именем макета»:

  • Если вы имеете в виду поля pages таблицы для каждой отдельной страницы, то они будут доступны в каждой записи при ее повторении v:page.menu (например, tx_fed_page_controller_action ).
  • Если вы имеете в виду поля pages but также, когда эта переменная наследуется (например, backend_layout is и tx_fed_page_controller_action is , но каждый из них использует разные методы), это становится более сложным: вам нужно будет пройти через корневую строку и использовать первое непустое значение. Для этого v:page.rootLine plus v:iterator.filter plus v:iterator.first может оказать большую помощь (поместите выходные данные из корневой строки в фильтр, чтобы удалить непустые значения, затем используйте first VH для выбора первого значения из этого отфильтрованного результата).
  • Если вы определяете этот «макет» в поле формы потока в шаблоне вашей страницы, он становится переменной FlexForm, которую вы можете читать flux:form.data (с наследованием, если оно не отключено, и если шаблоны совпадают по корневой строке).

В зависимости от того, что именно вы имеете в виду, существует довольно много возможных решений. Если вы также ищете рекомендацию о том, какой из них имеет смысл использовать: скорее всего, вы имеете в виду макет, который вы выбираете в свойствах страницы (независимо от поля), и для этого v:page.rootLine plus v:iterator.filter plus v:iterator.first — это хороший и универсальный метод для «выбора слайда» любого непустого значения из корневой строкитекущая страница.

Комментарии:

1. Я получил tx_fed_page_controller_action из {_all.sections} . Спасибо за вашу помощь

Ответ №2:

Вы можете получить его с помощью переменной в fluid

 lib.templateName = TEXT
lib.templateName.stdWrap.cObject = CASE
lib.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 = Default
}

page = PAGE
page.10 = FLUIDTEMPLATE
page.10 {
    #...
    variables.templateName < lib.templateName
}
  

Комментарии:

1. Я попробовал этот метод. Но не получил имя шаблона. Я попробовал <f:CObject typoscriptObjectPath=»lib.TemplateName» />

2. поскольку вы не используете его в контексте страницы, объект данных typoscript может отличаться. поэтому вам может потребоваться сначала получить объект страницы из объекта данных, а затем получить доступ к полям backend_layout.