Есть ли какие-либо возможности использовать что-то вроде alternating template parts
в tx_news
расширение? В стандартном шаблоне tt_news
я использовал <!-- ###NEWS_1###-->
<!-- ###NEWS_2###-->
<!-- ###NEWS_3###-->
и т. Д. В tx_news
все в Fluid, и я не вижу ничего подобного чередующимся частям шаблона в ручном режиме.Количество чередующихся частей шаблона в tx_news
ответ
Хорошо, снова ответ:
Вы можете просто сделать это в жидкости, нет необходимости для конкретной функции. Новость отображается в цикле for-loop, который предоставляет переменную с текущим индексом, см. documentation.
Используйте индекс цикла по модулю вашего количества различных шаблонов, чтобы визуализировать новости по-разному чередующимся образом. Итерационная переменная предоставляет некоторые дополнительные свойства, которые вы можете использовать для управления выходом. Чтобы увидеть их все, используйте <f:debug>{iterator}</f:debug>
.
Например, в виде списка EXT: news вы можете сделать это, чтобы получить три чередующихся шаблона, каждый из которых представлен частичным. Только соответствующий внутренний контур показан:
<f:for each="{news}" as="newsItem" iteration="iterator">
<f:if condition="{iterator.index} % 3 == 0">
<f:render partial="List/Item_Layout1" arguments="{newsItem: newsItem,settings:settings,iterator:iterator}" />
</f:if>
<f:if condition="{iterator.index} % 3 == 1">
<f:render partial="List/Item_Layout2" arguments="{newsItem: newsItem,settings:settings,iterator:iterator}" />
</f:if>
<f:if condition="{iterator.index} % 3 == 2">
<f:render partial="List/Item_Layout3" arguments="{newsItem: newsItem,settings:settings,iterator:iterator}" />
</f:if>
</f:for>
Если у вас есть EXT: VHS установлен с пространством имен ярлыка v
, это может быть сделано немного более элегантный (очень хорошее расширение!):
<f:for each="{news}" as="newsItem" iteration="iterator">
<v:switch value="{iterator.index} % 3">
<v:case value="0" break="true">
<f:render partial="List/Item_Layout1" arguments="{newsItem: newsItem,settings:settings,iterator:iterator}" />
</v:case>
<v:case value="1" break="true">
<f:render partial="List/Item_Layout2" arguments="{newsItem: newsItem,settings:settings,iterator:iterator}" />
</v:case>
<v:case value="2" break="true">
<f:render partial="List/Item_Layout3" arguments="{newsItem: newsItem,settings:settings,iterator:iterator}" />
</v:case>
</v:switch>
Спасибо Jost - я попробую :) – Adrian
Вы можете просто делайте это в жидкости, нет необходимости в конкретной функции. Новость отображается в цикле for-loop, который предоставляет переменную с текущим индексом - используйте (mod your number of templates) для рендеринга новостей по-разному. Пример можно найти здесь (под заголовком «Итерационная информация»): http://fluidtypo3.org/viewhelpers/fluid/master/ForViewHelper.html – Jost
@ Jost: так как это ответ, почему бы вам не опубликовать его в качестве ответа и добавить информацию об использовании по модулю ('')? –
lorenz
@lorenz С тех пор как я ленив :-) – Jost