如何使用Typoscript

时间:2018-09-11 20:16:34

标签: typo3 typoscript typo3-8.x

我正在使用flexform为html节元素选择背景图像。

看起来像这样:         dataWrap = |

    dataWrap.override.stdWrap.cObject = COA
    dataWrap.override.stdWrap.cObject {
        10 = TEXT
        10.dataWrap = <section class="content {field:flexform_mdCol1} {field:flexform_mdCol2} {field:flexform_col21class}
        20 = TEXT
        20.value = " style="background-image: url(/
        30 = IMG_RESOURCE
        30 {
            file.import.data = field:flexform_mdCol3
        }
        40 = TEXT
        40.value = );">|</section>
    }
    dataWrap.override.if.isTrue.field = flexform_mdCol3

问题是这不适用于视频。我创建了第二个字段(mdCol4),以选择mp4视频和mdCol3字段作为最坏情况的海报和背景。看起来像这样,但是不起作用。

    dataWrap.override.stdWrap.cObject = COA
    dataWrap.override.stdWrap.cObject {
        10 = TEXT
        10.dataWrap = <section class="content {field:flexform_mdCol1} {field:flexform_mdCol2} {field:flexform_col21class}

        20 = TEXT
        20.value = " style="background-image: url(/
        30 = IMG_RESOURCE
        30 {
            file.import.data = field:flexform_mdCol3
        }
        40 = TEXT
        40.value = );">

        50 = TEXT
        50.value = <video width="1920" height="1080" autoplay loop muted playsinline poster="/
        60 = IMG_RESOURCE
        60 {
            file.import.data = field:flexform_mdCol3
        }
        70 = TEXT
        70.value = ">

        80 = TEXT
        80.value = <source src="/
        90 = IMG_RESOURCE
        90 {
            file.import.data = field:flexform_mdCol4
        }
        100 = TEXT
        100.value = " type="video/mp4"></video>|</section>
    }
    dataWrap.override.if.isTrue.field = flexform_mdCol4

出现了海报和背景,但是IMG_RESOURCE似乎不适用于视频,并且我找不到类似的东西。

TYPO3为8.7.18。这是错误还是我只是傻瓜? :)

任何帮助都非常有用。预先感谢!

3 个答案:

答案 0 :(得分:1)

感谢伯恩德的方法和帮助,下面是解决方法:

com.github.mjreid.flinkwrapper

答案 1 :(得分:0)

视频没有图像。
建立IMG_RESOURCE对象首先要分析图像并根据需要调整大小。

如果只需要文件的url,则不需要任何图像处理。只需使用公共网址:

90 = FILES
90 {
    // if it is exact one file:
    files = flexform_mdCol4

    // otherwise use references:
    # references {
    #     table = tt_content
    #     uid.field = uid
    #     fieldname = flexform_mdCol4
    # }

    renderObj = TEXT
    renderObj.data = file:current.publicUrl
}

答案 2 :(得分:0)

只为艺术而已:

我忘了注意到您有使用错字产生干净代码的可能性。

您已将换行拆分为数组中的不同对象。这对于阅读和识别应该在一起的东西有点不利。

这是您的解决方案的变体:

我认为30(您的75)缺少一些内容,因为它将仅呈现sys_file uid的列表,而无需使用/包装。

dataWrap.override.cObject = COA
dataWrap.override.cObject {
    10 = IMG_RESOURCE
    10 {
         file.import.field = flexform_mdCol3
         dataWrap = <section class="content video {field:flexform_mdCol1} {field:flexform_mdCol2} {field:flexform_col21class}" style="background-image: url(|);">
    }

    20 = IMG_RESOURCE
    20 {
        file.import.data = field:flexform_mdCol3
        wrap = <video width="1920" height="1080" autoplay loop muted playsinline poster="|">
    }

    30 = CONTENT
    30 {
        table = tt_content
        select {
            table = tt_content
            uid.data = field:uid
        }

        renderObj = TEXT
        renderObj {
            data = flexform: pi_flexform:flexform_mdCol4
        }
    }

    40 = FILES
    40 {
        files.field = flexform_mdCol4

        renderObj = TEXT
        renderObj.data = file:current:publicUrl

        wrap = <source src="#" type="video/mp4"></video>|</section>
        wrap.splitChar= #
    }
}
dataWrap.override.if.isTrue.field = flexform_mdCol4

splitChar处注意已更改的40,以便可以按原样使用管道字符。