TYPO3 - Is it not allowed to use names in typoscript? - typo3

I modified a part of a working typoscript template from:
10 = COA
10.stdWrap.wrap = <div class="toggleBar">|</div>
10 {
...
to
toggleBarDIV = COA
toggleBarDIV.stdWrap.wrap = <div class="toggleBar">|</div>
toggleBarDIV {
...
Now it is not working anymore. Is it not allowed to use names in typoscript?
Where is it allowed and where not? Where can I get more infos?

As far as I know, COA keys must always be numbers (10,20,1,2...);
There is a feature request about using more meaningful keys:
https://forge.typo3.org/issues/45488

Related

How to output COA_INT in fluid template form element

I'd like to pass an extension GP variable to a form that I built outside of the plugin. When trying to do so, I used a COA_INT which turned out to output <INT_SCRIPT. instead of the value.
In order to do so, I built this typoscript object:
lib.gpSWord = COA_INT
lib.gpSWord {
# Protects from XSS!
stdWrap.htmlSpecialChars = 1
10 = TEXT
10 {
stdWrap.data = GP:tx_indexedsearch_pi2|search|sword
}
}
and then tried to output it like this (as suggested here:
<f:form.textfield name="search[sword]" value="<f:format.raw>{f:cObject(typoscriptObjectPath: 'lib.gpSWord')}</f:format.raw>" id="tx-indexedsearch-searchbox-sword" class="tx-indexedsearch-searchbox-sword font-h2" />
And also tried building up the variable before hand using f:variable but nothing worked.
The expected result would be that the variable would be set and the value would then be passed to the form.textfield viewhelper but appearently this does'nt work either.
You should commit the variable in Typoscript (setup) with:
page.10 = FLUIDTEMPLATE
page.10.variables.gpSWord < lib.gpSWord
Then you are able to use it in you Fluidtemplate with:
<f:format.raw>{gpSWord}</f:format.raw>
lib.gpSWord = COA_INT
lib.gpSWord {
stdWrap {
wrap = &tx_indexedsearch_pi2[sword]=|
data = GP:tx_indexedsearch_pi2|sword
if.isTrue.data = GP:tx_indexedsearch_pi2|sword
}
}
Try this for GP.

TYPO3/Typoscript : render sql query as array

I am using TYPO3 6.2.
On my website, i make a SQL query this way :
lib.bloc_top = COA
lib.bloc_top.10 < styles.content.get
lib.bloc_top.10.select.selectFields = header
lib.bloc_top.10.select.where = ( deleted = 0 && hidden = 0 && tx_gridelements_container = 2571 && CType = 'header' )
All works but instead of outputting the results as HTML code, I would like to render it in an array that I would use in my FLUID template this way :
<f:for each="{car}" as="el">
<li>Brand : {el}</li>
</f:for>
Is it possible ?
Thanks for your help :)
You should not select the container by a specific UID, but create a "car" container type via Gridelements CE backend layout instead.
Anyway, to get the data into an array, you don't have to do anything special, since this is automatically done by styles.content.get under the hood.
While styles.content.get uses the default tt_content setup, you can change that via renderObj as described here: https://docs.typo3.org/typo3cms/TyposcriptReference/6.2/ContentObjects/Content/
To get the data into your Fluid template you just have to replace the default renderObj with a FLUIDTEMPLATE https://docs.typo3.org/typo3cms/TyposcriptReference/6.2/ContentObjects/Fluidtemplate/Index.html
lib.bloc_top.10.renderObj = FLUIDTEMPLATE
lib.bloc_top.10.renderObj {
file = path/to/your/template/file.html
}
Since the loop is handled by the CONTENT object of styles.content.get, you can skip the f:for part in your template though.
Usually any kind of data is provided within the cObj->data array, so something like <h1>{data.header}</h1> should do the job.
And even with CONTENT there should be a counter, since there is https://docs.typo3.org/typo3cms/TyposcriptReference/DataTypes/Gettext/Index.html#cobj
To get any available data you should use <f:debug>{_all}</f:debug> in your Fluid template.

Typo3 GP Variables in Form

I created a COA_INT like this:
lib.linguasitoparametrol = COA_INT
lib.linguasitoparametrol {
10 = TEXT
10.stdWrap.data = GP:L
}
I print in fluid like so:
Value = {f:cObject(typoscriptObjectPath: 'lib.linguasitoparametrol')}
Result is: Value = 0 or Value = 1.
Ok it works.
Now i want to write the variable in a input area so i write:
<f:form.textarea name="search[languageUid]" value="{f:cObject(typoscriptObjectPath: 'lib.linguasitoparametrol')}" />
But i obtain in input value <!--INT_SCRIPT.5e0cf67ea790e31ff7adaa744a7a992c-->
Why? how can i solve it?
The <!--INT_SCRIPT.5e0cf67ea790e31ff7adaa744a7a992c-->should only displayed if you do not cache the page witch contain your template.
<!--INT_SCRIPT.5e0cf67ea790e31ff7adaa744a7a992c--> Is an placeholder for you content that is replaced after cache has build.
You dont need for GP:L a COA_INT object: When you have multiple languages you have allready typoscript conditions for these. So your Cache is build for each of these. The Cache for L=1 is allways different than the cache for L=2.
I would recommend to use it without use of COA:
lib.linguasitoparametrol = TEXT
lib.linguasitoparametrol.data = GP:L
Alternative if you use it in an Fluid Template you can pass the information via variables:
page = PAGE
page.10 = FLUIDTEMPLATE
page.10 {
template = FILE
template.file = fileadmin/templates/MyTemplate.html
partialRootPath = fileadmin/templates/partial/
variables {
currentLangUid = TEXT
currentLangUid.data = GP:L
}
}
And use it in your Fluid Template by {currentLangUid}, so you dont have to use the cObject Viewhelper.

Build HMENU with Information from TCE

I have extended the TCA for every Backend-Page on the Page-Tree. One of the new Options is the "Page-Type", for example "PressPage". With this Extension, i have a new databasefield in the table "pages".
Now i would build an HMENU/TMENU with all pages, below this folder.
[...]
lib.MetaPressNavigation{
special = directory
special.value = ID_FROM_FOLDER_WITH_PAGETYPE_PRESSPAGE
[...]
But i have no idea to realize them with typoscript.
I hope anyone can help me.
Thanks.
EDIT:
Now - i have try it with an extended TCA. It's very easy for any User to make some configuration for this projectpage. The Users can set a value with an Checkbox in a special tab.
I have try to get the page out form the database, with this special config - any page have in the database on the column "tx_meta_pagetype the value 9. I need the UID from this page to build the META-Navigation. It will be full functional - when i give a hardcoded uid, but i need this dynamic.
This is my attemp, to get the UID from the database:
temp.MetaNavigationIds = CONTENT
temp.MetaNavigationIds{
table = pages
select.Where = tx_meta_pagetype = 9 #tx_meta_pagetype is set from the TCA
renderObj = TEXT
renderObj.field = uid
renderObj.stdWrap = |
}
lib.MetaNavigation = HMENU
lib.MetaNavigation{
special = directory
special.value < temp.MetaNavigationIds #the UID of configured page, that i need for the menu
1 = TMENU
1 {
wrap = <ul> | </ul>
NO{
wrapItemAndSub = <li> | </i>
wrapItemAndSub.insertData = 1
allStdWrap.insertData = 1
}
}
}
I have try a lot of database question with typoscript, but nothing works.
Be careful, special.value is not a content object but just a property. You are copying a content object (CONTENT) in its place. This does not work.
However it does have stdWrap. Therefore something like
special.value.stdWrap.cObject < temp.MetaNavigationIds
Should work out.
For renderObj.stdWrap = | enter renderObj.wrap = |, instead. Please mind the trailing comma. This will make sure that you actually get a comma separated list of uids. Otherwise your uids would be printed just after each other, thus forming one big number.
Please test each part individually before adding the components together. You should make sure that each pease returns the correct data, otherwise you will never get a working solution.
And of course select.Where must be select.where. Capitalization does matter.
Here is a working example for CONTENT:
page.10 = CONTENT
page.10 {
table = pages
select {
where = doktype = 199
recursive = 99
# Needs to be your root page uid
pidInList = 1
}
renderObj = TEXT
renderObj.field = uid
renderObj.wrap = |,
}
If you are using TYPO3 6.2, I would recommend to use the new category system. You can create different categories in the TYPO3 backend and assign those categories to your pages.
With this, you can create a HMENU/TMENU like shown below:
20 = HMENU
20 {
special = categories
special.value = 1,2
1 = TMENU
1.NO {
...
}
}
If you do not use TYPO3 6.2 or do not want to use the category system, you can use a userfunction to return the pages which matches your "Page-Type".
HMENU/TMENU TypoScript will be like shown below.
lib.leftmenu.20 = HMENU
lib.leftmenu.20.special = userfunction
lib.leftmenu.20.special.userFunc = user_myspecialmenu_pi1->getPressPages
The TypoScript above is just an example, and you need to code the userfunction your own.
A detailed reference of the special property userfunction is available here and a example can be found here.

TYPO3: how to include other columns in section index?

I have a website with two columns (colPos = 0 and colPos = 2). Haw can I include headers from column 2 into the section index? The default behavior is to include only headers from column 0.
More specifically, here is the TypoScript I use to generate the menu:
lib.menupage = HMENU
lib.menupage {
1 = TMENU
1 {
wrap = <ul> | </ul>
NO.wrapItemAndSub = <li> | </li>
sectionIndex = 1
}
}
I'm using TYPO3 6.0.
i guess you are searching for
lib.menupage.1.sectionIndex.useColPos = -1
(But this seems to be only available in TYPO3 6.0)
As a workaround it should be possible to do it on your own. Render a normal menu, but override (allWrap.cObject should do the job) the link with an CONTENT Object, which retrieves all headers from tt_content of that page. Here is some pseudo-code which help to explain how i would try to solve that problem. This code will not work, just show the principle:
lib.menupage = HMENU
lib.menupage {
1 = TMENU
1 {
wrap = <ul> | </ul>
NO.wrapItemAndSub = <li> | </li>
# pgampe suggested to use: stdWrap2.append instead of allWrap.cObject. My intention
# was to override the original link at all. But you should be able to play with
# the different stdWrap functions to get the best solution
# as far as i remember, allWrap will be wrapped by "wrapItemAndSub"
NO.allWrap.cObject = CONTENT
NO.allWrap.cObject {
table = tt_content
select {
# the uid is the id of the page where we need the content from
pidInList.field = uid
orderBy = colPos, sorting
}
# inside the renderobj we get the elements which are retrieved by CONTENT
renderObj = TEXT
renderObj {
field = header
typolink.parameter.field = pid
typolink.section.field = uid
required = 1
wrap = <span class="inside-li">|</span>
}
}
}
}
You are most likely looking for the section index function in the menu content object.
The rendering is defined in tt_content.menu.20.3.stdWrap.prepend.20 = CONTENT. You can use the TSOB (TypoScript Object Browser) to investigate the relevant typoscript setup.
You can adjust it to your needs like any CONTENT object in TYPO3. However it should already select any column (at least in 6.0).