TypoScript appends '>' when rendering content from tt_content - typo3

I am trying to upgrade TYPO3 from version 4.6 to 4.7. The extension automaketemplate (0.20) is used for the site templates.
I have the following code to retrieve some content from the tt_content table:
lib.darkbar < styles.content.get
lib.darkbar.select.pidInList = {$contentpage.darkbarPID}
For debugging the actual bodytext in the tt_content table is simply the string 'BODYTEXT'. The rendered content in 4.7 is:
<div id="site-darkbar-navigation">
<!-- CONTENT ELEMENT, uid:96/text [begin] -->
>
<!-- Text: [begin] -->
<p class="bodytext">BODYTEXT</p>
<!-- Text: [end] -->
</div>
In 4.6 I did not have the > sign. Where does it come from?

I assume you somewhere have declared an additional > in your configuration. this might come from PHP, typoscript or fluid-/marker-template.
you might search for something like >> in your sources (like <br />>)
Another possibility (especially after a version change [1]): the rendering of some wraps is done 'unbalanced' (= opening and closing are done in the same TEXT or wrap). there might be a wrap as COA something like:
...wrap.cObject = COA
...wrpa.cObject {
10 = TEXT
10.value = <div class="default
20 = TEXT
20.value = variant
20.if.equals.field = layout
20.if.value = 1
30 = TEXT
30.value = ">|</div>
}
(here the opening and closing is done in the same wrap, but the wrap consists of three TEXTs and the opening is done in 10 and clsing in 30)
While in an earlier version all was done in 10, we now have three parts. If you removed the wrap in the early version just with ...10 > it now leaves an broken HTML-Tag.
You might deactivate one part of your configuration after the other until you can localize the error. (Extensions, Templates, Typoscript)
[1] the rendering of contentelements was always topic of changes to reflect state of the art HTML markup. As the rendering was done primary in typoscript and the static template of CSC each version of TYPO3 had compatibility versions of CSC. In your case you might use the static template compatible to the version of the first build so that modifications to the rendering match the rendering.

Related

Typo3 News Extension: "TypoScript object path "lib.tx_news.contentElementRendering" does not exist"

Without knowingly having changed something in the configuration or templates, I can't output content elements in the detail view of news-articles.
1/1) #1253191023 TYPO3Fluid\Fluid\Core\ViewHelper\Exception
TypoScript object path "lib.tx_news.contentElementRendering" does not exist
I have this configuration:
typo3conf/ext/news/Configuration/TypoScript/setup.txt
# Rendering of content elements in detail view
lib.tx_news.contentElementRendering = RECORDS
lib.tx_news.contentElementRendering {
tables = tt_content
source.current = 1
dontCheckPid = 1
}
typo3conf/ext/site_package/Resources/Plugin/News/Templates/News/Detail.html
<f:if condition="{newsItem.contentElements}">
<!-- content elements -->
<f:cObject typoscriptObjectPath="lib.tx_news.contentElementRendering">
{newsItem.contentElementIdList}
</f:cObject>
</f:if>
So it looks to me as it is what is recommended in the docs: https://docs.typo3.org/p/georgringer/news/master/en-us/Tutorials/Templates/RenderContentElements/Index.html
Typo3 version: 10.4.12
News version: 8.5.2
I can't figure out why I can't output content-elements in news-articles all of the sudden.
Can anyone help?
If lib.tx_news.contentElementRenderingis not defined, most likely you've forgotten to include the static TypoScript Template of EXT:news.
News system - Installation:
Preparation: Include static TypoScript
The extension ships some TypoScript code which needs to be included.
Switch to the root page of your site.
Switch to the Template module and select Info/Modify.
Press the link Edit the whole template record and switch to the tab Includes.
Select News (news) at the field Include static (from extensions):

Typo3: How to disable Bootstrap Language Menu

I installed the latest Typo 3 LTS 7 Version and used Bootstrap with it. I did not enable any multilanguage stuff, nor do I want it to be displayed. How to disable the language ("Deutsch, Dansk, English") which is presented after every footer?
Thanks a lot!
OK, I found a solution.
Just add
page.theme.metasection.enable = 0
to the Template Constants.
This only disables the Language Footer.
I do not know however, how to configure it (i.e. replace the non existing language names like Dansk)
The language menu is being built in EXT:bootstrap_package/Configuration/TypoScript/setup.txt (line 40).
lib.language = COA
lib.language {
...
}
It takes the languages you have defined in the backend (database), assigns information to these and builds up the HMENU. In the default bootstrap_package configuration's case that should be the languages with the ids 0,1,2.
lib.language.20.special.value = 0,1,2
You could change the values there, or get rid of the whole section all together (so not to load it at all) depending on what you want to achieve. If you want to remove it you need to remove the references in the template itself, too.
EXT:bootstrap_package/Resources/Private/Partials/Page/Structure/Footer.html (line 21):
<div class="col-md-4 language">
<f:cObject typoscriptObjectPath="lib.language"/>
</div>
.. and from all other places you are referencing lib.language.

In TYPO3 6.1, how to debug why CType is not rendering at all

In one of my TYPO3 6.1 sites, when I insert a content element of the CType "menu" ("Menü/Sitemap"), this is simply not rendered in the frontend. If I choose another CType, the item is output.
I have checked in the TSOB, tt_content.menu is there (css_styled_content is included).
Also, it is in the right column which is rendered via csc.
temp.maincontent < styles.content.get
temp.maincontent {
select.where = colPos = 0
wrap = <div class="maintext">|</div>
// required = 1
}
How could I debug this?
There was a weird issue with multiple backend layouts, being rendered in various parts of the PAGE COA. I've solved it by avoiding multiple use of the same temp. object, defining one temp.homecontent and one temp.standardcontent so they are not conflicting anymore.
To answer my own question "how to debug this": Well, by debugging.
I disabled all my TS includes and created the most basic kind of site: page = PAGE and page.10 < styles.content.get. With this setup, the CType menu was appearing. So I tried continuing by adding each TS template and then, when it stopped working, by adding / removing temp.item by tempitem from the corresponding template. Until I found the conflicting part. Fairly basic. But as there were no errors or similar hints in TSOB, probably the only way.

Links at the start of content elements

TYPO3 adds these links at the start of almost every element:
<a id="c1427"></a>
where number is, I guess, UID of the element.
How TYPO3 render this link and is it possible to disable it for a specific FCE?
It depends on your TYPO3 Version. In 4.5 it is defined via:
tt_content.stdWrap.innerWrap.cObject.default.10.value = <div id="c{field:uid}"
If you use the TS-Objectbrowser, you should find it somewhere in tt_content.stdWrap.*
Depending on the rendering you are using, you could be able to add an if statement like:
tt_content.stdWrap.innerWrap.cObject.default.10 {
# check the uid of the content element which is rendered
if.isInList.field = uid
# do not render if content element uid is 1,2 or 44
if.value = 1,2,44
}
For sure, it depends on your configuration, so you cannot copy & paste. And i did not test this code! But it should show the way to go:)
I think your problem is in tt_content.stdWrap.prepend that is different for any languages different from default language.
Try to put this typoscript in your template:
tt_content.stdWrap.prepend >
tt_content.stdWrap.wrap = <div class="content-element">|</div>

How can I insert the current page title automatically into a TYPO3 template?

actually the title is the whole question.
I just want to modify the template so that the current page title is automatically shown (i'm working with html templates so I just need the bit of typoscript to get the page title out of the database)
I hope that's possible
It is. It's pretty simple to do. I'll assume you're using TemplaVoilà, because if you're not, you should be :-D
Start off by putting some HTML in your template with a dummy page title. Give it an ID attribute so it's easy to map. Like:
<h1 id="page-title">Page Title Here</h1>
Next, go into TemplaVoilà and map that <h1> element to the content type "TypoScript Object Path". When it prompts you for the object path, you can put in anything you want -- convention is that dynamic content is added in the "lib" namespace, so let's call it lib.pagetitle. When it asks you if you want to map this to "INNER" or "OUTER", choose "INNER" -- that will mean you're just mapping the space BETWEEN the <h1>...</h1> tags. ("OUTER" means you're replacing the whole element, including the tags, which we don't want here because we want this to stay an H1.) Save your template mapping.
Now go into your site's TypoScript template. Here you're going to insert the logic that fills in that space we just mapped with actual content. To insert the page title is a matter of a couple of lines of TypoScript:
lib.pagetitle = TEXT
lib.pagetitle.data = page : title
What this says is "take the space in the template that I mapped to lib.pagetitle. Create a content object in that space of type TEXT. Then fill that content object with the title of the page."
Save your TypoScript template. Now you're done!
This probably sounds complicated at first glance, and it is, but the nice thing about this system is that it's amazingly flexible. Inserting text dynamically is just the beginning. The TypoScript Reference (a.k.a. the "TSRef") has all the details -- look up "getText" to get a flavor, that's the function that makes the "page : title" call in your TypoScript template drop in the page title.
TSRef is your friend. I keep a printed copy of it at my desk -- if you want to make TYPO3 sing, it is your songbook.
I prefer the vhs solution:
{v:page.info(field:'title')}
https://fluidtypo3.org/viewhelpers/vhs/master/Page/InfoViewHelper.html
lib.pagetitle = RECORDS
lib.pagetitle {
source.data = page:uid
tables = pages
conf.pages = TEXT
conf.pages.field = nav_title
}
To get current page title:
lib.pagetitle = TEXT
lib.pagetitle.field=title
For meta data :
Its very important to place meta after header tag when we are gone through mobile compatible website
In order to prevent quirks mode in IE9 I need to add this lines at the very top of every HTML page:
You can write the whole header by yourself, by adding disableAllHeaderCode = 1 to your typoscript or you can hack it by adding your meta tag directly to the head tag:
page.headTag = <head><meta http-equiv="X-UA-Compatible" content="IE=edge" />
Place this at your typoscript
meta.X-UA-Compatible = IE=edge,chrome=1
httpEquivalent: (Since TYPO3 4.7) If set to 1, the http-equiv attribute is used in the meta tag instead of the “name” attribute. Default: 0.
For more information about TYPO3 stuff you may visit my blog
https://jainishsenjaliya.wordpress.com/2013/10/10/put-meta-tag-on-top-of-header-section-in-typo3/
If you want to use this in a fluid page template, you can also simple use:
{data.title}
to access the page title.
You can current page title by following typoscript:
lib.pagetitle = TEXT
lib.pagetitle.data = page : title
and then use this object to your page using typoscriptObjectPath like following way:
<f:cObject typoscriptObjectPath="lib.pagetitle"/>
If you want to use a fluid only solution, install the VHS extension and you can output the page title without using any TypoScript at all like this:
Tag Example:
<v:page.header.title title="NULL" whitespaceString="' '" setIndexedDocTitle="1">
<!-- tag content - may be ignored! -->
</v:page.header.title>
Inline Example:
{v:page.header.title(title: 'NULL', whitespaceString: '' '', setIndexedDocTitle: 1)}
lib.page_title = CONTENT
lib.page_title {
table = pages
select {
where = uid = 2
}
renderObj = COA
renderObj {
10 = TEXT
10 {
field = title
wrap = <h1 class="page_title">|</h1>
}
20 = TEXT
20 {
field = subtitle
stdWrap.required = 1
stdWrap.wrap = <h5>|</h5>
}
}
}
call the lib.page_title where want to render typoscript with this lines
<f:cObject typoscriptObjectPath='lib.page_title' />
I hope this helps !!!
The question is quite old but I still want to add something I never read here.
TYPO3 offers many things concerning the header, and it's right that it's also possible to render it completely individual. Nevertheless all the nice options of TYPO3 are more or less disabled by the individual solution.
So first the direct answer on the question:
The default page title can be overridden like this
config.pageTitle.stdWrap.override.cObject < lib.pagetitle
If several page types are defined and the title shall be set individually for each type, the configuration can be noted inside the page-definitions:
page = PAGE
page {
typeNum = 0
config.pageTitle.stdWrap.override.cObject < lib.pagetitle_1
...
}
anotherPage = PAGE
anotherPage {
typeNum = 1
config.pageTitle.stdWrap.override.cObject < lib.pagetitle_2
...
}
Below still a lib.pagetitle which makes a little bit more than only using title or subtitle - it uses news-title if the extension is used on a page:
lib.pagetitle = COA
lib.pagetitle {
10 = TEXT
10 {
// subtitle: used as field for title tag
value.field = subtitle // title
if.isFalse.data = GP:tx_news_pi1|news
}
20 = RECORDS
20 {
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
}
}
}
Now still some background why I think some individual header might not be the best solution:
TYPO3 usually adds several details to the header, that are useful and it's not required to combine those things individually new.
Scripts and stylesheets are organized and can be even by TypoScript compressed and merged. If some syntax is followed it even takes care that a library like jquery is only included once.
TYPO3 has many functions in TypoScript where everything can be defined related to the header and also it can be decided if scripts shall be perhaps never be included at all in the header but instead in the bottom of the page-source.
Metatags can be defined (and overridden by extensions or sub-templates)
Implementing this whole logic manually again in an own template in my opinion is not useful and I think headers should be only disabled for special page-types like AJAX or dynamic PDF-files. This is the primary reason that I consider that option as useful.
Her still the current link for the most recent documentation about the config-options in TypoScript (anchor pagetitle):
https://docs.typo3.org/typo3cms/TyposcriptReference/Setup/Config/Index.html#pagetitle