我想从 tt_content 表中呈现一个页面,结果如下所示。伪代码如下:
--include '*/' --prune-empty-dirs --include 50/200/file2.txt
我的typoscript结构如下:
if (header_link != "" && image != "") {
// build content with header_link and image
html = <div><a href="{header_link}"><img src="{img}" /></a></div>
} else {
// build content without those fields
html = <div><h1>{header}</h1></div>
}
我不知道为什么Typo3的官方网站上没有可用的示例代码,他们只有描述。因此,我再次依赖stackoverflow-ies。 :)
答案 0 :(得分:1)
请记住,TypoScript只是一个配置表和不是编程语言。更重要的是,你不能在任何对象中放置条件,因为要求所有条件必须在顶层解决。幸运的是,您至少有两个解决方法,您可以创建自己的ContentElements让我们将它命名为MySepcialHeader
和MySpecialHeaderWithImg
,这样您可以在条件符号的情况下将其中一个置于文本CE之前。怎么做到这一点?
是非常有用的工具,您可以在不触及任何单行PHP的情况下创建自己的类似CE的结构,所有这些都在Db记录( CE后端布局)和相应的TypoScript中完成。它可以与TemplaVoilà的FCE进行比较,更多可以在文档here和here中进行比较。
拥有真实的 CType
您也可以创建自己的CType,即使用Extension Builder它更有趣,但是当您在Fluid视图上使用PHP时,它为您提供了无限的可能性,如果您创建一个扩展,这就足够了,然后你可以在其中添加无限数量的插件/ CType。
您可以在other answer中找到有关此技术的更多信息。
答案 1 :(得分:0)
这个TypoScript模板适用于TYPO3 CMS 6.2.17服务器。
page.30 = CONTENT
page.30 {
table = tt_content
select {
orderBy = sorting
where = colPos = 0
}
renderObj = COA
renderObj {
wrap = <div>|</div>
10 = COA
10.10 = TEXT
10.10.if.isTrue.field = header_link
10.10.if.isFalse.field = image
10.10 {
stdWrap.data = header_link
stdWrap.typolink {
parameter.field = header_link
wrap = <img src="|" />
ATagBeforeWrap = 1
}
}
10.20 = TEXT
10.20.if.isFalse.field = header_link
10.20.stdWrap.field = header
10.20.stdWrap.wrap = <h1>|</h1>
}
}
除非tt_content
和header
字段均为正值,否则结果会显示header_link
image
字段。以下是我在测试中使用的tt_content
记录的相关字段。 (||表示空字段值。)
uid|hidden|Sorting|CType|header|image|deleted|colPos|header_link|
29|0|256|text|Regular text element|NULL|0|0||
30|0|512|image|Image element|0|0|0|file:37|
31|0|384|image|Image element with no image|0|0|0||
32|0|768|div|Divider|NULL|0|0||
我将hidden
和deleted
列作为提醒添加,因为如果其中一列设置为1
,则CONTENT select
函数不会将renderObj的记录返回给使用。还检查开始和结束日期,以及当前用户是否具有对content元素的访问权限。请参阅"select" in the TypoScript Reference manual。
对象上的多个TypoScript if
语句通过隐式逻辑AND连接在一起。请参阅"if" page in the TypoScript Reference及其更复杂的&#34;示例在"Explanation"下有两个条件。
以下是此测试中涉及的if
逻辑。
Object page.30.renderObj.10.10.
uid|header_link|if.isTrue.field = header_link|image|if.isFalse.field = image|Result
29||no|NULL|no|not rendered
30|file:37|yes|0|yes|rendered
31||no|0|yes|not rendered
32||no|NULL|no|not rendered
Object page.30.renderObj.10.20.
uid|header_link|if.isFalse.field = header_link|Result
29||yes|rendered
30|file:37|no|not rendered
31||yes|rendered
32||yes|rendered
如果我们仅对if.isTrue.field = header_link
对象使用page.30.renderObj.10.10
测试,并且不进行if.isFalse.field = image
测试,则输出显示会产生相同的结果。但是,保持if.isFalse.field = image
测试更接近请求,并说明检查多个字段。