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

问题描述 投票:0回答:4

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

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

由于测试和生产服务器上的 pageUid 值不同,我希望使其更加动态。

我想将 pageUid 存储在一个变量中,然后在 Fluid 模板中使用该变量。

typo3 fluid
4个回答
8
投票

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

常数:

plugin.myext.settings.detailPid = 123

设置:

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

变量用于可变内容。如果你有相同的PID,使用带有TEXT或类似变量的变量就太过分了,设置是正确的方法。

此外,变量仅可用于 FLUIDTEMPLATE 内容元素,不可用于插件!

此外,在您的 extbase 控制器中,您可以通过简单的访问来访问这些设置

$this->settings['detailPid']
,而无需先渲染 cObject。

在流体中,您可以通过

{settings.detailPid}
访问设置。


5
投票

在内容对象 FLUIDTEMPLATE 的打字稿模板中:

打字稿设置/配置:

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

或使用常量

打字稿常量:

pageUid = 114

打字稿设置/配置:

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

然后您可以在 Fluid HTML 中获取

pageUid

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

要在 Fluid partial 中使用变量,请确保传递这些变量,例如通过提供

_all
:

<f:render partial="fluid_part_header" arguments="{_all}" />

0
投票

请考虑使用 Jokumer 的解决方案。 randomresult 的解决方案可行,但我不建议这样做。您不需要 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


-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 模板。

© www.soinside.com 2019 - 2024. All rights reserved.