Как передать значение из шаблона текущей страницы в шаблон элемента содержимого 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
}
Другие вопросы по тегам