如何将流体页面模板中的值传递给ext:mask内容元素模板?

时间:2017-03-10 21:37:21

标签: typo3 typoscript fluid typo3-7.6.x tx-mask

在带有ext:mask的TYPO3 7 LTS中,我想将页面模板中的值传递给通过掩码扩展渲染的FLUIDTEMPLATE。

我正在努力实现的一个例子:

  

内容元素包含描述汽车的内容:沃尔沃,4WD ......

     

在页面模板中,我想以不同的方式显示“car”   颜色。因此页面模板将能够命令:“获得第一个   汽车,并以绿色显示。然后第二辆车用黄色显示“。   (不,它与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的不同实例中?

3 个答案:

答案 0 :(得分:4)

你可以添加以下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

在您的页面模板中,您可以使用Fluid

设置颜色
<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>

我希望这可以帮助您解决问题。

答案 1 :(得分:2)

我遇到了类似的问题: 掩码内容元素的集合;同一页面上同一元素的两个不同渲染:

  • 一个随机遮罩 - 呈现为预告片,链接到页面底部的细节
  • 呈现为列表项(详细信息)

    的所有掩码的列表

    我的解决方案:

随机预告片的渲染:

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 = .......

使用TYPO3 8的面具3.0.1 ......

renderObj.mask_qa_community.settings.file = .......

希望它对其他人有用。

答案 2 :(得分:0)

我正在使用面具4.x在TYPO3 9中重新讨论这个问题,

export class HomeComponent implements OnInit {
  lat: number;
  long: number;
  restaurants: ApiData[];
  rest: any;
  show: boolean = false;
  x = document.getElementById("restaurant");

  constructor(private api: Api) {}

  ngOnInit() {}

  getLocation = () => {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(this.showPosition);
    } else {
      this.x.innerHTML = "Geolocation is not supported by this browser.";
    }
  }

  showPosition = (position) => {
    this.lat = position.coords.latitude;
    this.long = position.coords.longitude;
  }

  random = (length) => {
    return Math.floor(Math.random() * length)
  }

  displayRest = () => {
    this.rest = this.restaurants[this.random(this.restaurants.length)];
    console.log('restaurant obtained');
  }

  filterRestaurants = () => {
    console.log('clicked');
    this.api.getRestaurants(this.lat, this.long).subscribe((data) => {
      this.restaurants = data.results;
      this.show = true;
      this.displayRest();
    }, error => {
      console.log(error.message)
    });

    console.log(this.rest);
  }
}