Custom content element is not rendered in front-end - typo3

Need help with a custom content element that is not being rendered.
This is my typoscript:
tt_content.cat_button = FLUIDTEMPLATE
tt_content.cat_button {
template = FILE
template.file = EXT:so_product/Resources/Private/Templates/ContentELements/CategoryButton.html
layoutRootPath = EXT:so_product/Resources/Private/Layouts/
}
Even if I misspell CategoryButton.html, there won't be an error message. So how will I know if the correct template is found?
If I remove rows template and template.file, I get message "Oops, no template found..."
My template only contains <p>Test</p>. Do I need sections and layout too?
This is the guide I used: http://docs.typo3.org/typo3cms/extensions/sitepackage/CustomContentElements/Index.html
No errors in log.

Your typoscript is simply wrong.
Check the TSRef http://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/Fluidtemplate/Index.html
tt_content.cat_button = FLUIDTEMPLATE
tt_content.cat_button {
file = EXT:so_product/Resources/Private/Templates/ContentELements/CategoryButton.html
}

Simple typo:
ContentELements -> ContentElements
Also bug in TYPO3 that didn't display error message.

Related

linkhandler data attribute TYPO3 8

I would like to add a data attribute to the link handler on my website.
I have the following in my setup.ts:
config.recordLinks.test {
forceLink = 0
typolink {
parameter = #test
ATagParams = data-toggle="hover"
}
}
However, the data attribute does not arrive in the source code.
I have no more ideas why this could be. Everything else that is interpreted from https://docs.typo3.org/m/typo3/reference-coreapi/8.7/en-us/ApiOverview/LinkBrowser/Linkhandler/Index.html
Anyone have an idea?

How to prevent TYPO3 to render head- and body-elements when outputting JSON?

In TYPO3 8.7 I'm trying to generate JSON using FLUID.
I've created a page with dummy content and I've updated my TypoScript configuration for all pages in a folder.
TypoScript setup
[PIDinRootline = 10]
page = PAGE
page {
typeNum = 0
config {
disableAllHeaderCode = 1
disablePrefixComment = 1
xhtml_cleaning = none
admPanel = 0
debug = 0
metaCharset = utf-8
additionalHeaders = Content-Type:text/json;charset=utf-8
}
}
[global]
I created a dummy JSON file as well, to test the output, before creating the actual content using FLUID:
api.json
{
"hello": "world"
}
Now, this seems to work fine. But the output still includes the html- and body-elements.
Rendered output:
<html>
<head></head>
<body>
{"hello": "world"}
</body>
</html>
The documentations says:
If you want to output JSON, RSS or similar data with Fluid,
you have to write the appropriate TypoScript which passes the
page rendering to Extbase and Fluid respectively. Otherwise,
TYPO3 will always generate the <head>- and <body>-section.
But I don't know what to do here actually. How can I get TYPO3 to not render the wrapping HTML-elements?
The problem was a new syntax in TYPO3 8 and newer. In newer versions, the additionalHeaders is no longer just a TEXT but an array with numeric indices. So to set the correct header type, you have to use this one:
additionalHeaders.10.header = Content-Type:application/json;charset=utf-8
When you override the page object, you should remove all inside it before with page >.
Additionally Fluid is a templating engine for HTML, I don't know if that fits for JSON output.
Better way:
I'd suggest to use a separate object than page and a different page type:
[globalVar = GP:type = 133]
jsonOutput = PAGE
jsonOutput {
typeNum = 133
config {
...
}
}
[global]
What you are missing is this typoscript:
config.disableAllHeaderCode = 1
read the manual
as you want it on a special page you can use a special typoscript template for this page. For a pagetype it is a little more complicated as this configuration would work on all pagetypes.
if you want some config options only for a special pagetype you can add this config to the pagetype only like this:
json = PAGE
json.config.disableAllHeaderCode = 1
Be aware that fluid is more complicated if you output other structure than HTML. But it is possible! Have a special look on whitespace and braces ({})

Typo3 Powermail form - Send Page UID to receiver

I've created a small application form for my website. Everything works fine.
In the plugin settings there is a field called "Bodytext for Email to Receiver". This is the the mail I get, everytime somebody fills out an application form. It looks like this right now:
New application arrived!
{powermail_all}
Is it possible to get the Page UID from the application form into a variable to put it in there?
The only solutions I've found need TypoScript. Is there any other way?
The solution with typoscript should be (according to manual):
use in template:
{f:cObject(typoscriptObjectPath:'lib.pageuid')}
define the typoscript:
lib.pageuid = TEXT
lib.pageuid.data = page:uid
I'm not sure about an additional variable for {powermail_all} as I'm not familiar with the extension.
If I understand the manual correctly this might be possible with :
plugin.tx_powermail {
settings {
setup {
manipulateVariablesInPowermailAllMarker {
// possible sections (define for each, where you need it):
// confirmationPage, submitPage, receiverMail, senderMail, optinMail
submitPage {
pageUid = TEXT
pageUid.data = page:uid
}
senderMail {
pageUid = TEXT
pageUid.data = page:uid
}
}
}
}
}

How to use Sitename in Constants as a default value in TYPO3?

I want to set the Sitename in Constants by default, so I can use this settings.variable in my Fluidtemplate.
I found in another post here on stackoverflow:
DB:sys_template|1|title
GLOBAL:TYPO3_CONF_VARS|SYS|sitename
But if I use this in my constants.ts like this:
# cat=plugin.tx_rmnavigation/01_NaviSettings/a; type=string; label=testing sitetitle
testsitetitle = DB:sys_template|1|title
OR
# cat=plugin.tx_rmnavigation/01_NaviSettings/a; type=string; label=testing sitetitle
testsitetitle = GLOBAL:TYPO3_CONF_VARS|SYS|sitename
AND in my setup.ts:
testsitetitle = {$plugin.tx_rmnavigation.settings.testsitetitle}
I get only the text not the value of the "variable" see this picture Constant Editor...
How can I use the Sitename in Constants as a defaultvalue?
Edit
I forgot to say, perhaps it's important for this issue, I try this here in both files:
plugin.tx_rmnavigation {
settings {
..
}
}
You have to assign your constant to a content object's data property (see https://docs.typo3.org/typo3cms/TyposcriptReference/8.7/ContentObjects/Index.html and https://docs.typo3.org/typo3cms/TyposcriptReference/8.7/Functions/Stdwrap/Index.html#data) to get it resolved:
testsitetitle = TEXT
testsitetitle.data = {$plugin.tx_rmnavigation.settings.testsitetitle}
And I would prefer your second variant for the constant definition because it uses the value from the current template record:
# cat=plugin.tx_rmnavigation/01_NaviSettings/a; type=string; label=testing sitetitle
testsitetitle = GLOBAL:TYPO3_CONF_VARS|SYS|sitename
But the first one should also work if you use colons instead of pipes:
testsitetitle = DB:sys_template:1:title
If you have a multi domain page the query to DB:sys_template:1:sitetitle might not work, as the 1 is the UID, not the PID of the root node of your template. But TSFE to the rescue!
In the context of your page call, the TSFE already has the sitetitle from the backend template loaded.
If you for example want to output a og:site_name, you can access the value by using:
og:site_name = TEXT
og:site_name {
data = TSFE:tmpl|sitetitle
attribute = property
}
This way no additional database queries are needed and it will work on multi domain, multi root node pages.
Thanks for your suggestions. I found a solution with your infos.
Honestly I think this doesn't works in Constants, because the both methods are readonly.
So I found a working solution for my Issue: I need that Variable only for read in my Templates, so I create a new Typoscript File libs.ts and included this with:
# Include Libraries
<INCLUDE_TYPOSCRIPT: source="FILE: EXT:rm_navigation/Resources/Private/TypoScript/libs.ts">
in the /Configuration/TypoScript/setup.ts File.
The content of libs.ts is:
TSFE-Syntax
lib.sitename = TEXT
lib.sitename.data = GLOBAL:TYPO3_CONF_VARS|SYS|sitename
OR
DB-Syntax
lib.sitename = TEXT
lib.sitename.data = DB:sys_template:1:sitetitle
works both. I read that you use the colon-syntax for DB usage and the pipe-syntax for Global Variables.
To get this to Fluid use this Code:
<f:cObject typoscriptObjectPath="lib.sitename" />
I hope it helps Others who also has this Issue.

Typo3 - Custom email newsletters with direct_mail

Im building a newsletter and the start is like this:
DEAR ###USER_gender### ###USER_first_name### ###USER_last_name###
which outpouts
DEAR ###USER_gender### JOHN DOE
and I was hoping it would replace the gender mark with "Miss" and "Sir", depending on the value. How could I do this?
Extra fields have to be added to the field list (see docu). But I'm not sure whether this automatically works with non-string fields. Maybe using a hook is your solution or using another extension which adds a new field to tt_address.
Another solution is to nest marker:
###GENDER_###USER_gender######
and then warp you content in a new template object:
10 = TEMPLATE
10 {
template < yourAlreadyProcessedContent
marks {
GENDER_m = TEXT
GENDER_m.value = Sir
}
}
It's a bit unusual, but sometimes it's very useful.
(Personally I use it to replace version numbers in tt_content records.)
Edit:
Example for Dbugger:
Download the Introduction Package and install it. After that add to the Welcome page a new template record with the following steup:
temp.mainTemplate = TEMPLATE
temp.mainTemplate {
template = TEXT
template.value = (
Foo
###CONTENT###
###CONTENT###
Bar
)
subparts {
CONTENT < styles.content.get
}
}
page = PAGE
page {
typeNum = 0
10 = TEMPLATE
10 {
template < temp.mainTemplate
marks {
TEST = TEXT
TEST.value = ok
}
}
Now include CSS Styled Contnet and enable the following options:
clear constants, clear setup, rootlevel
The output should look like that:
Foo
Congratulations ...
Bar
If you add ###TEST### to the the tt_content record on the welcome page it will be replaced with ok.
This should work with direct mail, too.
Edit:
I'm sorry, this only works which normal extension which are use in the rendering process.
a little bit late, but here's the best solution for the salutation in direct_mail & tt_address .. works perfect for me. The personalized marker is just ###USER_salutation###,
https://blog.webentwickler.at/individuelle-marker-in-direct-mail/