Override HMENU that is included in another template - typo3

In TYPO3 4.7 I have a template that contains:
page.10 < temp.mainTemplate
This Template has two includes. The first contains this:
temp.mainTemplate = TEMPLATE
temp.mainTemplate {
subparts.menu_1 < temp.menu_1
}
And the second contains the actual HMENU typoscript:
temp.menu_1 = HMENU
temp.menu_1 {
#My Menu
}
Without altering either of the includes, how can I make an edit to the HMENU in the main template setup?
I have tried this above the first line without success:
temp.mainTemplate.subparts.menu_1 {
#Modifications to My Menu
}
I have tried this below the first line without success:
page.10.subparts.menu_1 {
#Modifications to My Menu
}

page.10.subparts.menu_1 is the right key to alter. It needs to be places after page.10 < temp.mainTemplate of course.
you can test it by deleting the menu completely with page.10.subparts.menu_1 > and it should disappear from the webpage.
There is no way of telling what exactly does not work without seeing more of your TS. May be you have just a typo somewhere

Related

TYPO3 render Event from typoscript and Fluid template

In TYPO3 10.4.8 I have the following page tree:
root
1level: Events
2level: Event A, Event B, Event C, ... and so ...
What I want to do in page Events is to render all subpages title, using FLUIDTEMPLATE.
So in the template of page Events I wrote
lib.EventContent = COA
lib.EventContent {
10 = COA
10{
table = pages
select {
orderBy = sorting
pidInList = this
}
}
}
and in the layout file
<f:for each="lib.EventContent" as="event" >
<p>event: {event.title}</p>
</f:for>
This doesn't work. Typo give me this error:
The argument "each" was registered with type "array", but is of type "string" in view helper "TYPO3Fluid\Fluid\ViewHelpers\ForViewHelper".
In addition, I also tried to change COA with CONTENT, in all possible combination (COA-CONTENT / CONTENT-COA / CONTENT-CONTENT)
What's wrong? is something that I cannot do?
Thanks all
The TypoScript should look something like this:
lib.EventContent = CONTENT
lib.EventContent {
table = pages
select {
orderBy = sorting
pidInList = this
}
}
But there is a much easier solution. TYPO3 already brings a content element "Subpages" which renders a menu of all subpages of a selected page:
This is done via Fluid Styled Content and TypoScript. Please check this file for details:
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSubpages.typoscript
A solution for you might look like this (untested):
lib.EventContent < tt_content.menu_subpages
lib.EventContent {
dataProcessing {
10 {
special >
}
}
}
It's also a good idea to have a look in all the TypoScript files in the Fluid Styled Content extension to get more inspiration.

How to include Header.html partial in TYPO3 ver 9

I want to change the Layout of my Headers in TYPO3. There is a post about this but this but I cant get it to work and that post is 2 years old. With TYPO3 most stuff is outdated quite quickly. This is the post.
Additionally I looked at this article. I know it is in German, maybe it helps anyways.
So I copied the Header.html from the TYPO3 system files, put it in a directory under fileadmin and tried to link to that directory.
fileadmin/.../Partials/Header/Header.html
In the Template setup i added the partialRootPath.
page = PAGE
page {
shortcutIcon = fileadmin/sitedesign/Resources/Private/Templates/Vave/img/Favicon.ico
10 = FLUIDTEMPLATE
10.file = fileadmin/sitedesign/Resources/Private/Templates/Vave/Contact/index.html
10.partialRootPath {
20 = fileadmin/Resources/Private/Partials
}
includeCSS {
contactFile1 = fileadmin/sitedesign/Resources/Private/Templates/Vave/Contact/css/Contact.css
}
}
In Header.html I created an additional case to check if it was working.
<f:case value="7">
<p class="{positionClass}">
<f:link.typolink parameter="{link}">{header}</f:link.typolink>
</p>
</f:case>
I then added that new case in the Page Resources to the TSConfig.
TCEFORM.tt_content.header_layout {
addItems.7 = Name1
}
Changing the content of the Header.html file in the TYPO3 system files works the way I expected it to, so I am quite sure that I understand the basic functionality. The TSConfig part works as well, because I can select "Name1" in the Header Layout Type field.
But no matter what part in the fileadmin Header.html version I change, nothing happens. I checked the path to that Partials folder and the spelling of everything a million times, so I do not think that is the issue either.
Of course I could just change the system file Header.html but that seems wrong on a lot of levels.
Thank you for any help.
Don't mix different usages of fluid!
You want to change the header partial of your content elements.
But you add the new partial to the fluid of page rendering.
if you use FSC (Fluid Styled Content) your additional partial path should go here:
lib.contentElement {
partialRootPaths {
10 = fileadmin/Resources/Private/Partials
}
}
breaking change: lib.contentElementinstead of lib.fluidContent
Additional advices:
be carefull with the names: aside from partialRootPaths there sometimes exist partialRootPath (without s in the end), which is not an object array. That enables you to set only one path (not the usual path list with priority) and which has priority over settings in partialRootPaths if both exist.
separate the different fluid usages!
Give them different paths. There are multiple ways. I prefer:
each extension gets it's own three folders in a folder named for the extension.
And also separate the page rendering and CEs (Content Elements). Your own CEs might be considered as part of the extension 'FSC'.
use a site extension.
All configuration goes into that extension: typoscript, templates, viewhelpers, TCA, ...
That is the basic configuration for that site, but also the additional configuration/ adaption for the used extensions.
May this code will help you!!
page = PAGE
page {
shortcutIcon = fileadmin/sitedesign/Resources/Private/Templates/Vave/img/Favicon.ico
10 = FLUIDTEMPLATE
10 {
templateName = TEXT
templateName {
cObject = TEXT
cObject {
data = levelfield:-2,backend_layout_next_level,slide
override.field = backend_layout
required = 1
case = uppercamelcase
split {
token = pagets__
cObjNum = 1
1.current = 1
}
}
ifEmpty = Innenseite
}
#templateName=TEXT
# templateName.value=index
layoutRootPaths {
20 = your layoutRootPaths
}
partialRootPaths {
20 = your partialRootPath
}
templateRootPaths {
20 = your templateRootPath
}
}
includeCSS {
contactFile1 = fileadmin/sitedesign/Resources/Private/Templates/Vave/Contact/css/Contact.css
}
}
Make sure header included properly in main template

TYPO3 Custom Menu Element

I am trying to create a custom menu element by using this in the Page TSConfig:
TCEFORM.tt_content {
menu_type.addItems.101 = My Menu
}
And this in Setup:
temp.my_menu = HMENU
temp.my_menu {
special = list
special.value.field = pages
1 = TMENU
1 {
wrap = <ul> | </ul>
NO = 1
NO.wrapItemAndSub = <li>|</li>
}
}
tt_content.menu.20.101 < temp.my_menu
But I get 'Oops, an error occurred!' where the menu should be.
It will render fine if I remove the Fluid includes in the template but then all the other content elements give errors.
Is there any way to have a typoscript menu element at the same time as fluid styled content?
Or if I really have to, how do I add a custom fluid menu template?
You need to move the line with the copy operation down to the bottom, otherwise the configuration is not copied, because it is not there yet.
The exception happens, because there is no rendering definition for the menu (because you never copied the configuration).
To see the real error instead of the exception, switch to the development preset in the install tool oder add the following line to your TS setup:
config.contentObjectExceptionHandler = 0
I noticed this :
TCEFORM.tt_content {
menu_type.addItems.101 = My Menu
}
as far as I know should be this :
TCEFORM.tt_content.menu_type {
types {
menu{
addItems {
101 = My Menu
}
}
}
}
I had to 'tweak' the special menus (typo3 7.6) and this worked:
Add special menu and add class="active" in TYPO3

TYPO3 CMS 7 tt_content layouts

I set up my own tt_content layout in TSconfig like
TCEFORM.tt_content.layout.removeItems = 1,2,3
TCEFORM.tt_content.layout.addItems.100 = Green Box
and added the class definition to my typoscript setup like
# Layout Green Box (100)
tt_content.stdWrap.innerWrap.cObject{
100=<tt_content.stdWrap.innerWrap.cObject.default
100.15.value = greenbox
}
in TYPO3 CMS 7.6.9. But it nothing happens in the frontend. The Layout "Green Box" appears in the Appearance > Layout dropdown but the class does not.
Did I something wrong or is there a new way since the fluid layouts in 7+ version?
In fact it needs to be defined in your own fluid template.
So what you do is to copy the private folders of fluid_styled_content to your own private folder of your distribution and added some lines to your typoscript constants like
styles.templates {
templateRootPath = {$resDir}/Private/Tt_content/Templates
partialRootPath = {$resDir}/Private/Tt_content/Partials
layoutRootPath = {$resDir}/Private/Tt_content/Layouts
}
In my case I edit the second line of Textmedia.html to
<div id="c{data.uid}" {f:if(condition: '{data.layout} == 100', then: 'class="greenbox"')}>
and et voila it works fine.
A little late, but somebody might still find this useful.
If you're using css_styled_content, then yes, it changes slightly in new versions.
Basically the structure looks now some like this:
stdWrap.innerWrap.cObject.[default|NN] {
# 10 - OPEN TAG
10.cObject.default.value = <div id="c{field:uid}"
# 20 - CLASS
20.10.value = csc-default
# 30 - CLOSE TAG
30.cObject.default.value = >|</div>
}
Differences between versions:
# overwrite basic settings for selected frame:
stdWrap.innerWrap.cObject.[NN (layout number or default)]
# for open tag: instead of NN.10.value (default.10.value) use: NN.10.cObject.default.value (default.10.cObject.default.value)
# for class: instead of NN.15.value (default.15.value) use: NN.20.10.value (default.20.10.value)
# for close tag: instead of NN.30.value (default.30.value) use: NN.30.cObject.default.value (default.30.cObject.default.value)
So in asked case it will be like this:
# Layout Green Box (100)
tt_content.stdWrap.innerWrap.cObject{
100 =< tt_content.stdWrap.innerWrap.cObject.default
100.20.10.value = greenbox
}

Remove TYPO3 Default wrappings and attributes

I'm using TemplaVoila and mapping a template to create a new site.
This is my first time in TYPO3, and all the default styling is messing up my html structure.
I want to remove stuff like divs, wrappings, p.bodytext, class="csc" etc
How can i make TYPO3 not render any wrappings/frames for all page contents?
PS. I know how to remove each individually, but is there a global setup to do in TS?
Remove static files from your main template.
Click on template, then click on your site root. Choose Info/Modify from toolbar and then click on Edit the whole template record, Includes.
The template is named CSS Styled Content.
This templates are include before your css files. So in your css you can just overwrite them if you don't want to remove the whole template.
Another solution is to remove css_styled_content and add content (default) instead.
My last idea is to setup the styled content in your main template like this
lib.parseFunc_RTE < lib.parseFunc
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines {
encapsTagList = div,p,pre,h1,h2,h3,h4,h5,h6
remapTag.DIV = P
nonWrappedTag = P
innerStdWrap_all.ifEmpty = <br />
#addAttributes.P.class = bodytext
#addAttributes.P.class.setOnly=blank
}
# remove class statements from h tags
lib.stdheader {
10.1.fontTag = <h1>|</h1>
10.2.fontTag = <h2>|</h2>
10.3.fontTag = <h3>|</h3>
10.4.fontTag = <h4>|</h4>
10.5.fontTag = <h5>|</h5>
stdWrap.dataWrap = |
}
Remove bodytext css:
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.P.class >