TYPO3 use parentRec in TCA - typo3

With FLexform it is possible to get check a parent Field using
<displayCond>FIELD:parentRec.field:=:value</displayCond>
Can I use the same method for simple TCA (my child is type inline)?
'displayCond' => 'FIELD:parentRec.field:=:value',
This doesn't work for me.
TYPO3 version 8.7

Yes, parentRec is limited to FlexForms.
Depending on your usecase this could be done with columnsOverrides together with overrideChildTca.

Related

How to get more infos about parameters in TYPO3 Class Reference

This is the TYPO3 Class Reference for the function addTCAcolumns(). Where can we get more infos about the $columnArray?
Use the full TYPO3 TCA documentation: https://docs.typo3.org/m/typo3/reference-tca/master/en-us/#
You can switch the TYPO3 version in the left column at the bottom.

Extensions change TCA in ext_tables.php Check for ExtensionManagementUtility and $GLOBALS["TCA"]

Extensions change TCA in ext_tables.php
Check for ExtensionManagementUtility and $GLOBALS["TCA"].
During upgrading typo3 version 7 to 8
How to solve this?
If you're the owner of this extension, it is recommended to migrate the TCA changes into the extensions' folder Configuration/TCA/ for new TCA tables, and Configuration/TCA/Overrides/ when adding fields or manipulating TCA.
This way, all changes from ext_tables.php should be moved in there, due to a better performance in frontend. See also this change:
https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/8.5/Breaking-78384-FrontendIgnoresTCAInExtTables.html

How to disable the translate option of content in TYPO3 8.7 translation wizard?

In TYPO3 8.7 you can choose whether you want to translate or copy content elements. How can I disable the "translate" option in the first step of the wizard?
In a current project the customer prefers to have only the copy possibility.
The Core itself supports this starting with version 9, so there is currently no core-wise solution in 8.x.
But: You may write an extension supporting the same configuration parameters as v9 does by XClassing PageLayoutView.php. Please see the change that introduces the possibility to configure these buttons.
Thx to the hint from Andreas Fernandez I was able to backport the feature from TYPO3 9.x to 8.7.x by xclassing the method.
I've put everything together into a Gist:
https://gist.github.com/peterkraume/1c0feb30440449ba1c708aa5ea8d7991
I am just using a css-based solution.
Just add the following to "ext_tables.php"
// Custom Backend CSS
$GLOBALS['TBE_STYLES']['skins']['base'] = [
'name' => 'cytrus Base Backend Skin',
'stylesheetDirectories' => ['EXT:myext/Resources/Public/Backend/']
];
And then create a file "mycss.css" in "EXT:myext/Resources/Public/Backend/" with the following content:
[data-slide="localize-choose-action"] > div > div:first-child {display: none;}
that's it!
this is the result

TYPO3: Appearance > Layout is missing in Gridelements

For a project I'm using TYPO3 7.6.11 with fluid_styled_content and Gridelements 7.0.5.
Unfortunately the field "Layout" in "Appearance" is missing in grid elements. For every other content element the layout field is available.
I can exclude problems with other extensions. I did not override the TCA by myself and there's no problem with my page ts configuration.
What's the problem here?
I'm pleased about every hint. Thanks!
In this case you got two options, since the Gridelements TCE form is based on a TCA palette named "frames", which has been removed with Fluid Styled Content.
So you will either have to add the missing fields directly to the showitem section of
tt_content => types => gridelements_pi1
just as they are used in Fluid Styled Content. Or you can add the missing palette "frames" by taking the definition from CSS Styled Content and adding it to the TCA palettes of tt_content.
Both should be done in your own extension within
Configuration => TCA => Overrides => tt_content.php
And finally there is another option: Wait for the next releases of Gridelements, since they will take care of the problem automagically ;-)
Thanks again to Joey for giving the correct hint. I now extended the TCA with the following lines of code:
$GLOBALS['TCA']['tt_content']['palettes'] = array_replace(
$GLOBALS['TCA']['tt_content']['palettes'],
[
'frames' => [
'showitem' => '
layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
spaceBefore;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:spaceBefore_formlabel,
spaceAfter;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:spaceAfter_formlabel,
section_frame;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame_formlabel
',
]
]
);

How to enable header_position in TYPO3 7.6

In versions prior to TYPO3 7.6 you could select a position for your header within your content element (left, middle, right as far as I remember).
The field which has been used for storing that information in tt_content header_position is still available.
However, it will not appear in the backend.
I'm also using fluid_styled_content for rendering my content, and the Header partial doesn't contain any reference to the position, but only to the layout field.
My question is: How can I reenable that field and use it to position my headers?
You have to build a quick extension of yours which can reenable the field. You need to create folders and a file like following:
your_ext/Configuration/TCA/Overrides/tt_content.php
the contents of that file are:
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
ExtensionManagementUtility::addTCAcolumns('tt_content',[
'header_position' => [
'exclude' => 1,
'label' => 'LLL:EXT:your_ext/Resources/Private/Language/locallang_db.xlf:tt_content.header_position',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'items' => [
['LLL:EXT:your_ext/Resources/Private/Language/locallang_db.xlf:tt_content.header_position.left', 'left'],
['LLL:EXT:your_ext/Resources/Private/Language/locallang_db.xlf:tt_content.header_position.right', 'right'],
['LLL:EXT:your_ext/Resources/Private/Language/locallang_db.xlf:tt_content.header_position.center', 'center']
]
]
]
]);
ExtensionManagementUtility::addFieldsToPalette('tt_content', 'header', '--linebreak--,header_position', 'after:header_layout');
ExtensionManagementUtility::addFieldsToPalette('tt_content', 'headers', '--linebreak--,header_position', 'after:header_layout');
Now the field should be back in the backend, because you've added it to the TCA via addTCAColumns to the tt_content configuration and added it via addFieldsToPalette to the header and headers palettes of tt_content, which are used by the types textmedia and header.
You can find out more about this by using the Configuration module in the TYPO3 backend. You can see it, when you are logged in as admin. Also a good place to look and learn about the TCA is the TCA reference: https://docs.typo3.org/typo3cms/TCAReference/
Now you need to alter the fluid_styled_content templates. You need to create template overrides for the header partial of fluid_styled_content.
First create a folder: your_ext/Configuration/TypoScript and add a setup.txt and a constants.txt file.
In setup.txt add the following lines:
lib.fluidContent{
templateRootPaths{
10 = {$plugin.your_ext.view.fluid_styled_content.templateRootPath}
}
partialRootPaths{
10 = {$plugin.your_ext.view.fluid_styled_content.partialRootPath}
}
layoutRootPaths{
10 = {$plugin.your_ext.view.fluid_styled_content.layoutRootPath}
}
}
In constants.txt do:
plugin.your_ext{
view{
fluid_styled_content{
templateRootPath = EXT:your_ext/Resources/Private/FluidStyledContent/Templates/
partialRootPath = EXT:your_ext/Resources/Private/FluidStyledContent/Partials/
layoutRootPath = EXT:your_ext/Resources/Private/FluidStyledContent/Layouts/
}
}
}
To enable your TypoScript, you need to add a ext_tables.php in your your_ext folder and give it the following one-liner:
TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY,'Configuration/TypoScript', 'Your Ext Template');
You need to include your static TypoScript to your page via the Template module to enable the change to fluid_styled_content
Now you can copy the templates you need from
typo3/sysext/fluid_styled_content/Resources/Private/Templates
typo3/sysext/fluid_styled_content/Resources/Private/Partials
typo3/sysext/fluid_styled_content/Resources/Private/Layouts
into your extensions folders you need to create:
your_ext/Resources/Private/FluidStyledContent/Templates
your_ext/Resources/Private/FluidStyledContent/Partials
your_ext/Resources/Private/FluidStyledContent/Layouts
Now you can alter the templates. For your header_position field, you probably just need to copy
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Heaeder.html
to
your_ext/Resources/Private/FluidStyledContent/Partials/Header.html
and add your selected value as {data.header_position} to a div class and style that.
Keep in mind you do not need to copy all of the templates, because with the TypoScript you just defined another location for fluid to search for templates and take them, if they are available. If not, fluid will walk back the chain and take the templates that are defined at position 9 and lower. You can look into the TypoScript Object Browser by the Template module and look into the TypoScript variable lib.FluidContent to see, if your TypoScript include has worked.
Hope this helped a bit ;)
The database field header_position is only included in the TYPO3 core extension css_styled_content. If you don't have that extension installed the field in the database is probably there because it was installed sometime before.
It is not advised to install css_styled_content and fluid_styled_content installed in parallel as some options can conflict.
If you want to use fluid_styled_content and have the header_position field available the best way to go would be to create a very small TYPO3 extension yourself that includes the necessary SQL definition for the column header_position, the appropriate TCA configuration for that column and a few bits of TypoScript to extend/override the „Partial” paths of fluid_styled_content.