TYPO3 - 如何正确定义常量,将其存储到变量中并使用流体模板内部

时间:2017-01-31 10:58:09

标签: typo3 fluid

在我正在处理的插件的Fluid模板中,有些东西是硬编码的。例如:

<f:else>
                <li>
                    <v:page.link pageUid="114" />
                </li>
            </f:else>

由于测试和生产服务器上的 pageUid 值不一样,我想让它更具动态性。

我想以某种方式将其存储在变量中,然后在流体模板中使用该变量。

我只是不熟悉这个以及在TYPO3中的位置。

提前致谢!

4 个答案:

答案 0 :(得分:9)

因为它是一个设置,所以这样做:

常量:

plugin.myext.settings.detailPid = 123

设定:

plugin.myext.settings.detailPid = {$plugin.myext.settings.detailPid}

变量用于可变内容。如果您使用TEXT或类似的变量使用相同的PID,则过度使用并且设置是正确的方式。

此外,变量只能用于FLUID_TEMPLATE内容元素,而不能用于插件!

同样在您的extbase控制器中,您可以通过简单访问$this->settings['detailPid']访问这些设置,而无需首先渲染cObject。

在流畅的情况下,您可以{settings.detailPid}访问设置。

答案 1 :(得分:3)

在内容对象的typoscript模板中FLUIDTEMPLATE:

Typoscript设置/配置:

10 = FLUIDTEMPLATE
10 {
    variables {
        pageUid = TEXT
        pageUid.value = 114
    }
}

或使用常量

Typoscript常数:

pageUid = 114

Typoscript设置/配置:

10 = FLUIDTEMPLATE
10 {
    variables {
        pageUid = TEXT
        pageUid.value = {$pageUid}
    }
}

然后你可以在Fluid html中获取 pageUid

<f:else>
    <li>
        <v:page.link pageUid="{pageUid}" />
    </li>
</f:else>

答案 2 :(得分:0)

请考虑使用jokumer的解决方案。 随机结果的解决方案可行,但我不建议。你不需要vhs传递变量。 不是在谈论保罗贝克的解决方案,因为它根本不起作用。至少不再是了。 (参见TYPO3 \ CMS \ Fluid \ ViewHelpers \ CObjectViewHelper,https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/CObject.html)。它只接受内容对象。

将Pid设置为常量PID_SOME_PAGE = 123,并在插件设置中设置变量。像这样:

plugin.tx_yourplugin {
  ...
  settings{
    somePage = {$PID_SOME_PAGE}
  }
  ...
}

如果需要,您可以绕过该常量版本,并直接在设置中设置您的页面ID。在我看来,这只是一种更清洁的方式,特别是对于大型网站。 然后,您可以在模板中使用该变量,例如<f:link.page pageUid="{settings.somePage}">Go to Page</f:link.page>。 f:link.page的更多选项:https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Link/Page.html

答案 3 :(得分:-1)

如果您仍然使用EXT:vhs,则可以执行以下操作:

TS-常量:

pageUid=114

TS-设置:

settings.pageUid = {$pageUid}

模板(流体)

<f:else>
    <li>
        <v:page.link pageUid="{v:variable.typoscript(path: 'settings.pageUid')}" />
    </li>
</f:else>

这将使其可用于所有FLUID模板。