[TYPO3-english] COA always true when used in if.isTrue.cObject?

Stephan Schuler Stephan.Schuler at netlogix.de
Wed Mar 7 03:00:16 CET 2018


Hey there!


tl;dr:

It's about caching.


The logical explanation:

TEXT is potentially cached, COA_INT is not.
Think about the second request. TEXT is supposed to not be recalculated but taken from cache. How can that depend on COA_INT, which might calculate differently compared to how it resulted during the previous request?


The technical explanation:

Wow, I'm old. Back in the days, there used to be something called the "TYPO3 Frontend Rendering Process".
Here it is:
https://buzz.typo3.org/uploads/media/TYPO3_Frontend_Rendering_Process_v1.5.pdf

TEXT is calculated on step 31 ("generate the page"), COA_INT as well as USER_INT are calculated on step 32 ("include non-cached objects").

Although that diagram is accurate for v4.1 and a lot of things have change since then, there's still a lot a lot of truth in that picture :).


The very technical explanation:

During step 31 of the previous diagram, all COA_INT and USER_INT sections are assumed as placeholder strings.
It's something like "<!--INT_SCRIPT.d41d8cd98f00b204e9800998ecf8427e--->"

See:
https://github.com/TYPO3/TYPO3.CMS/blob/7254650107f48732b963d5ef8c6838bdd02ff1bd/typo3/sysext/frontend/Classes/ContentObject/ContentObjectArrayInternalContentObject.php#L38

That's what goes to the cache: The string output of  the cachable part of your website filled with a couple of those INT_SCRIPT placeholders.

During step 32, all INT scripts are finally executed and their placeholder are replaced by the per-request individual result.

So I assume the TypoScript "if" part just casts "<!--INT_SCRIPT.d41d8cd98f00b204e9800998ecf8427e--->" to true.


Regards,



Stephan Schuler
Softwareentwickler | netlogix Web Solutions

Telefon: +49 (911) 539909 - 0
E-Mail: Stephan.Schuler at netlogix.de
Web: websolutions.netlogix.de



----------------------------
Case Study: 1&1-Vertriebspartnerportale – prämiertes Neos-Projekt
Lesen Sie, wie wir mit unseren Projektpartnern eine moderne, ausbaufähige Grundlage auf Basis von Neos CMS für den Betrieb der 1&1-Vertriebspartnerportale schaffen konnten und uns so den Neos Award Gold für herausragende Projekte sicherten. Mehr erfahren…https://websolutions.netlogix.de/referenzen/1und1
----------------------------




netlogix GmbH & Co. KG
IT-Services | IT-Training | Web Solutions
Neuwieder Straße 10 | 90411 Nürnberg
Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
E-Mail: info at netlogix.de | Web: http://www.netlogix.de

netlogix GmbH & Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
Umsatzsteuer-Identifikationsnummer: DE 233472254
Geschäftsführer: Matthias Schmidt



________________________________________
Von: typo3-english-bounces at lists.typo3.org <typo3-english-bounces at lists.typo3.org> im Auftrag von tcrass <news at tcrass.de>
Gesendet: Dienstag, 6. März 2018 22:22
An: typo3-english at lists.typo3.org
Betreff: [TYPO3-english]  COA always true when used in if.isTrue.cObject?

Dear all,

I've observed some -- at least: to me -- quite puzzling behavior in my
Typo3 7.6 installation. Consider the following TypoScript:

lib.textWithContent = TEXT
lib.textWithContent.value = foo

lib.textWithoutContent = TEXT
lib.textWithoutContent.value =

lib.coaWithContent = COA_INT
lib.coaWithContent {
   10 = TEXT
   10.value = foo
}

lib.coaWithoutContent = COA_INT
lib.coaWithoutContent {
   10 = TEXT
   10.value =
}

page.10 = TEXT
page.10 {
   value = This should be visible (TEXT)...
   if.isTrue.cObject < lib.textWithContent
}

page.20 = TEXT
page.20 {
   value = This should be invisible (TEXT)...
   if.isTrue.cObject < lib.textWithoutContent
}

page.30 = TEXT
page.30 {
   value = This should be visible (COA)...
   if.isTrue.cObject < lib.coaWithContent
}

page.40 = TEXT
page.40 {
   value = This should be invisible (COA)...
   if.isTrue.cObject < lib.coaWithoutContent
}

I'd expect entries 20 and 40 of the page array to not show up in the
rendered page, but alas! here's what I get:

This should be visible (TEXT)...This should be visible (COA)...This
should be invisible (COA)...


Obviously, the empty COA object at lib.coaWithoutContent is considered
being not-empty in page.40.if.isTrue.cObject < lib.coaWithoutContent.

Any explanation?

Cheers --

        Torsten
_______________________________________________
TYPO3-english mailing list
TYPO3-english at lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-english


More information about the TYPO3-english mailing list