TYPO3 - how to properly define constant, store it into variable and use inside of fluid template

北城以北 提交于 2021-02-07 06:23:08

问题


In the Fluid template of plugin I am working on, some things are hardcoded. For instance:

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

Since pageUid values are not same on test and production server I would like to make this more dynamic.

I would like to store this somehow in variable and then use the variable in the fluid template.

I just dont know hot to make this and where in TYPO3.

Thanks in advance!


回答1:


Because it is an setting do it like this:

Constants:

plugin.myext.settings.detailPid = 123

Setup:

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

Variables are for variable content. If you have the same PID using variables with TEXT or similiar is overdressed and settings are the correct way.

Also variables are only accessable for FLUID_TEMPLATE content element, not for plugins!

Also in your extbase controller you can access these settings by simple access $this->settings['detailPid']without to render the cObjects first.

In your fluid you can access settings by {settings.detailPid}.




回答2:


In typoscript template for your content object FLUIDTEMPLATE:

Typoscript setup/configuration:

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

or using constants

Typoscript constants:

pageUid = 114

Typoscript setup/configuration:

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

Then you can fetch pageUid in your Fluid HTML

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

To use variables in a Fluid partial, make sure to pass these along, e.g. by providing _all:

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



回答3:


If you use EXT:vhs anyways, you can do the following to:

TS-Constants:

pageUid=114

TS-Setup:

settings.pageUid = {$pageUid}

Template (Fluid)

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

This will make it available for all FLUID Templates.




回答4:


Please consider using jokumer's solution. randomresult's solution would work, but I wouldn't suggest it. You don't need vhs to pass variables. Not talking about Paul Beck`s solution, because it wouldn't work at all. Not anymore at least. (See TYPO3\CMS\Fluid\ViewHelpers\CObjectViewHelper, https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/CObject.html). It accepts only content objects.

Set your Pid in constants like PID_SOME_PAGE = 123 and set a variable in your plugins settings. Like this:

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

You can bypass that constants version if you want and set your page id in settings directly. It's just a cleaner way in my opinion, especially for larger websites. Then you can use that variable in your template, like this <f:link.page pageUid="{settings.somePage}">Go to Page</f:link.page>. More options for f:link.page here: https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Link/Page.html



来源:https://stackoverflow.com/questions/41955828/typo3-how-to-properly-define-constant-store-it-into-variable-and-use-inside-o

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!