#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
plusv:iterator.filter
plusv: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.