Как передать значение из шаблона текущей страницы в шаблон элемента содержимого ext:mask?
В TYPO3 7 LTS с ext:mask я хотел бы передать значение из моего шаблона страницы в FLUIDTEMPLATE, который отображается через расширение маски.
Пример того, чего я пытаюсь достичь:
Элемент контента имеет контент, который описывает автомобиль: Volvo, 4WD...
В шаблоне страницы я хочу отобразить эту "машину" разными цветами. Таким образом, шаблон страницы мог бы дать команду: "возьмите первую машину и покажите ее зеленым. Затем вторую машину и покажите ее желтой". (и нет, это не имеет ничего общего с CSS..)
Если это нужно сделать один раз на всей странице, я могу использовать
`tt_content.default.mask_car.settings.color = green`
Или (для записи), если целью этой переменной будет изменение представления, я мог бы использовать:
`tt_content.default.mask_car.settings.file = path/to/Mask/Content/Templates/car_green.html`
Но если на странице есть несколько экземпляров одного и того же элемента контента, такой подход не годится.
Как передать разные значения в разные экземпляры одного и того же CE на странице?
2 ответа
Вы можете добавить следующий TypoScript:
lib.set_register = LOAD_REGISTER
lib.set_register.color = TEXT
lib.set_register.color.current = 1
lib.get_register.color = TEXT
lib.get_register.color.data = register:color
lib.mask_car < styles.content.get
lib.mask_car.select.where = colPos=123
И внутри вашего шаблона страницы вы устанавливаете цвет с помощью жидкости
<f:cObject typoscriptObjectPath="lib.set_register.color" data="green"/>
Получите ваши элементы контента с Fluid
<f:cObject typoscriptObjectPath="lib.mask_car"/>
И переключите выход элемента содержимого в шаблон маски с помощью Fluid
<f:if condition="{f:cObject(typoscriptObjectPath: 'lib.get_register.color')} == 'green'">
<f:then>
green
</f:then>
<f:else>
not green
</f:else>
</f:if>
Я надеюсь, что это поможет вам решить вашу проблему.
У меня была похожая проблема: коллекция элементов содержимого маски; два разных рендеринга одного и того же элемента на одной странице:
- Одна случайная маска-це, представленная как тизер, со ссылкой на детали внизу страницы
Список всех масок ce, представленных как list-items (деталь)
Мое решение:
Рендеринг случайного тизера:
lib.qa_random_teaser_community < styles.content.get
lib.qa_random_teaser_community.select{
where = colPos=12
pidInList = {$pidCommunityQAStorage}
max = 1
orderBy = rand()
}
Предоставление детального списка:
lib.qa_list_community < styles.content.get
lib.qa_list_community{
renderObj < tt_content
renderObj.default.mask_qa_community.settings.renderListItems = 1
select {
where = colPos=12
pidInList = {$pidCommunityQAStorage}
}
}
Я копирую tt_content в renderObj, затем могу изменить его, добавив выделенную настройку для элемента mask только для рендеринга контента:
renderObj.default.mask_qa_community.settings.renderListItems = 1
В шаблоне маски мне просто нужно проверить настройки и запустить соответствующий рендеринг:
<f:if condition="{settings.renderListItems}">
<f:then>
<f:render section="qa-detail" arguments="{data:data}"/>
</f:then>
<f:else>
<f:render section="qa-teaser" arguments="{data:data}"/>
</f:else>
</f:if>
Другой подход заключается в выборе отдельного шаблона жидкости вместо простого задания параметра:
renderObj.default.mask_qa_community.settings.file = .......
В маске 3.0.1 с TYPO3 8...
renderObj.mask_qa_community.settings.file = .......
Надеюсь, это будет полезно для кого-то еще.
Я возвращаюсь к этому вопросу, в TYPO3 9 с маской 4.x, это работает:
lib.my_content_element {
renderObj.mask_content_text.settings.test = 123
}