After updating from TYPO3 4.5 to 6.2, File lists are not rendered in the frontend anymore.
# Default PAGE object:
page = PAGE
page.typeNum = 0
page.stylesheet = fileadmin/template/design.css
page.20 = TEMPLATE
page.20 {
template = FILE
template.file = fileadmin/template/templ.html
workOnSubpart = document
subparts.cont = CONTENT
subparts.cont {
table = tt_content
select.orderBy = sorting
select.where = colPos = 0
}
This is the TypoScript Setup I was using before; it should the standard rendering routine for Text (that is working) and Images (this is working as well), but for some reason there's only an empty ul block:
<!-- File list: [begin] -->
<ul class="csc-uploads csc-uploads-0"></ul>
<!-- File list: [end] -->
I don't know what is going wrong...
I found the mistake. TYPO3 was still set to run "as TYPO3 4.5" compatibility mode. Going through the Upgrade wizard again and finally use TYPO3 6.2, everything is now working.
Bottom line: TYPO3 4.5 compatibility mode is not actual producing the same output as TYPO3 4.5!
Related
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
}
It might be a simple solution to that but I am not able to figure it out.
I implement a typo3 6.2.12 website using the bootstrap_package extension. There I have a page with child pages within the page tree. On each child page a comment function should be attached at the end of the main page content. For the comment functionality I use the pw_comments extension, as it is very flexible.
The pw_comments manual shows a possible the integration as follows:
lib.content = COA
lib.content {
10 < styles.content.get
# List comments
20 < lib.pwCommentsIndex
# Write new comment
30 < lib.pwCommentsNew
}
Actually very simple and straightforward.
The bootstrap package extension handles the content as follows (inside base.ts):
lib.dynamicContent = COA
lib.dynamicContent {
5 = LOAD_REGISTER
5 {
colPos.cObject = TEXT
colPos.cObject {
field = colPos
ifEmpty.cObject = TEXT
ifEmpty.cObject {
value.current = 1
ifEmpty = 0
}
}
pageUid.cObject = TEXT
pageUid.cObject {
field = pageUid
ifEmpty.data = TSFE:id
}
}
20 < styles.content.get
20.select.where = colPos={register:colPos}
20.select.where.insertData = 1
20.select.pidInList.data = register:pageUid
90 = RESTORE_REGISTER
}
lib.dynamicContentSlide =< lib.dynamicContent
lib.dynamicContentSlide.20.slide = -1
And at that point I have no clue how to integrate pw_comments. In the setup of the plugin I tried this:
[PIDupinRootline = 54]
lib.dynamicContent = COA
lib.dynamicContent {
# List comments
30 < lib.pwCommentsIndex
# Write new comment
31 < lib.pwCommentsNew
}
[end]
The goal of the above is: Attach pw_comments to the main column output to each child page of parent page with uid 54.
Actually it is working but due to the inheritance with lib.dynamicContentSlide =< lib.dynamicContent the comments get also attached each of the 3 footer columns which is not desired behavior.
I could use the plugin extension which is available for pw_comments but that would mean that the editor has always to add that plugin to new child pages when creating them.
I could "hack" the fluid content template files and add a <f:cObject /> tag and call the plugin lib, but I think that solution is odd and .. well .. a hack.
So is there any way how I could attach that plugin to these child pages in a typo script way? I guess it is just a lack of syntax knowledge and yes, typo3 is not my every day job.
Hope anybody can give me a hand on this issue. Thanks so much in advance!
You simple need to replace the reference by a real copy before you add your TypoScript.
lib.dynamicContentSlide < lib.dynamicContent
# your TS goes here
Just repeat all lines with an reference to lib.dynamicContent with a copy operator instead, before you add your modifications to the actual content definition.
This is probably very basic, but I'm stuck.
In TYPO3 6.1.x with tx_news, I have configured the news detail view to appear on the same page as the list view as taught on http://docs.typo3.org/typo3cms/extensions/news/latest/Main/Tutorial/IntegrationWithTs/Index.html
Also, I have pulled in the news'header as h1 as such
temp.h1 = COA
temp.h1 {
10 = TEXT
10 {
value = <h1>{page:title}</h1>
insertData = 1
}
10 = RECORDS
10 {
if.isTrue.data = GP:tx_news_pi1|news
dontCheckPid = 1
tables = tx_news_domain_model_news
source.data = GP:tx_news_pi1|news
source.intval = 1
conf.tx_news_domain_model_news = TEXT
conf.tx_news_domain_model_news {
field = title
htmlSpecialChars = 1
}
wrap = <h1>|</h1>
}
}
What I couldn't solve yet is that the plugin element has a title (in the regular "header" field). I need to display this header only in the list, but hide that plugin's header field in detail view.
How / where can I do that via page TS?
This is probably not even in the plugin, but in css_styled_content?
Something like this...
[globalVar = GP:tx_news_pi1|news > 0]
plugin.tx_news.stdheader >
[else]
But how?
A plugin is always using this prototype object:
tt_content.list
Therefore you could delete the header of this object like that
tt_content.list.10 >
But if you have other plugins on the same page, their headers would also be deleted. So that would be a bad idea.
I would suggest you use the header_layout field. By default it has an entry called "Hidden" that will hide the header of your plugin. If you don't have it, check the Page TypoScript configuration. You can add own items by using:
TCEFORM.tt_content.headerLayout.addItems.99 = My Header Layout
Then you can then define the rendering of your own layouts in
lib.stdheader.10
(it's a CASE object)
I'm new to TYPO3 and Fluid and trying to display the page content using a Fluid template similar to the following one:
<div id="content">
<f:format.html>{content}</f:format.html>
</div>
The page data is entered via the backend using a two-column layout (colPos=0, colPos=1).
I am now trying to display the content of the first column (colPos=0) inside the div.
At the moment, my TYPO-Script looks like the following:
page = PAGE
page {
# ...
5 = FLUIDTEMPLATE
5 {
file = fileadmin/templates/default.html
# ...
variables {
pageTitle = TEXT
pageTitle.data = page:title
content = CONTENT
content {
table = tt_content
select {
where=colPos=0
}
renderObj = COA
renderObj {
10 = TEXT
10.field = bodytext
}
}
}
}
It works this way, but I cannot get rid of the feeling that my 5.variables.content is way too complicated.
I saw some solutions using content < styles.content.get as an alternative but using this causes my resulting div to be empty.
Are there any more elegant ways (i.e. shorter in this context) to achieve what I am doing?
On your question which approach is more elegant
(I don't use fluid, but I think it's general Typoscript):
If you want to use css_styled_content, but with more flexibility and transparence than the shortcuts "get", "getLeft" etc., use this:
content < styles.content.get
content.select.where = colPos = 0
No need to specify content = CONTENT in that case.
In the way you wrote it above, you would probably need to add:
10.parseFunc = < lib.parseFunc_RTE
to your renderObj, as else, automatically linked e-Mail addresses etc. won't be rendered in the content.
If you want full control over the markup, your original approach using the CONTENT object is superior to css_styled_content. But you will have to cover each field the editors are supposed to use.
I always use this article: http://www.typo3wizard.com/en/articles/explaining-the-content-object.html
With css_styled_content on the other hand, you get parsing for all fields for free - but also you get all the markup it will write for you.
It might be helpful to look at csc's static template in /typo3/sysext/css_styled_content/static/setup.txt to see what it does.
i dont use fluid, just plain TS for my projects, but i hope ill help.
In backend the cols are like this if u have not "touched" em:
| col1(Left) | col0(Normal) | col2(Right) | col3(Border) |
What i do is this for "normal" layout:
page.10 = TEMPLATE
page.10 {
subparts{
LEFT-CONTENT < styles.content.getLeft
CONTENT < styles.content.get
RIGHT-CONTENT < styles.content.getRight
}
marks {
DESCRIPTION < styles.content.getBorder
}
If u need something more u can use something like this to generate some content that is not on that page and can use it to display it on all pages.
subparts{
LEFT-CONTENT < styles.content.getLeft
LEFT-CONTENT {
select.pidInList = 50
select.where = colPos=0
select.orderBy = sorting
wrap = <div class="col100">|</div>
}
page.5.variables.content < styles.content.get
Of course you must have the CSS styled content extension installed (default) and the static template "CSS Styled content" included in your TypoScript Template (Tab: Includes).
Alternative solution: https://fluidtypo3.org/viewhelpers/vhs/development/Content/RenderViewHelper.html (along with get and random get/render counterparts).
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 >