Gerade kürzlich stand ich vor dem Problem, dass ich in einem Extbase-Plugin, welches non-cacheable sein musste, den Title-Tag und die Meta-Description dynanisch aus der Extension setzen musste.
Der häufig genutzter Ansatz den Title und die Description im GLOBALS-Array zu überschreiben
$GLOBALS['TSFE']->page['title'] = $newTitle; $GLOBALS['TSFE']->indexedDocTitle = $newTitle; $GLOBALS['TSFE']->page['description'] = $newDescription;
was in dem Fall eines nicht-cachebaren Plugins leider nicht funktioniert. Daher habe ich dann einen eher einfachen aber effektiven Ansatz verfolgt. In den Projekt wird die seo_basics-Extension genutzt, also deaktivieren wir alle Head-Tags der seo_basics-Extensin im Typoscript-Template der entsprechenden Seite:
plugin.tx_seobasics >
Nun werden kein Title und keine Meta-Description mehr in den Head gerendert und wir können diese in unserer Extension „händisch“ mittels der addAddtionalHeaderData-Methode in unserem Controller neu setzen:
$title = '<title>' . $myNewTitle . '</title>'; $metaDescription = '<meta name="description" content="' . $myNewMetaDescription . '">'; $this->response->addAdditionalHeaderData($title . PHP_EOL . $metaDescription);Google+
aus verschiedenen Gründen möchte ich mir meine Meta-Tags flexibel in typoscript zusammenbauen und dabei u.a. auch Parameter berücksichtigen die aus Extbase (eigene Extension) kommen.
D.h. ich will z.B. den Titel des eines Objekts an typoscript übergeben und dort ausgeben. Ich bin zu folgender Lösung gekommen.
1. Das ganze Objekt an typoscript übergeben
{produkt -> f:cObject(typoscriptObjectPath: ‚lib.extMeta‘)}
(oder nur einen Wert: {produkt.title ->
f:cObject(typoscriptObjectPath: 'lib.extMeta.title')})
2. Die einzelnen feld-werte in ein register schreiben:
lib.extMeta = COA
lib.extMeta.1 = LOAD_REGISTER
lib.extMeta.1 {
extMetaTitle.cObject = TEXT
extMetaTitle.cObject.field = titel
extMetaDescription.cObject = TEXT
extMetaDescription.cObject.field = beschreibung
extMetaKeywords.cObject = TEXT
extMetaKeywords.cObject.field = keywords
extMetaImg.cObject = TEXT
extMetaImg.cObject.field = bilder
}
Nun kann z.B. der Titel direkt mit typoscript weiter manipuliert und ausgegeben werden:
page.1001 = TEXT
page.1001.value = {register:extMetaTitle}
page.1001.wrap = {register:extMetaTitle}
page.1001.insertData = 1
page.headerData.1001 = TEXT
page.headerData.1001.value = {register:extMetaTitle}
page.headerData.1001.wrap = | {$pageTitleSuffix}
page.headerData.1001.insertData = 1
...
Stichworte: extbase typoscript meta daten, title, open graph image
wenn ihr da schon angelangt seid:
page.headerData.1001 = TEXT
dann wäre:
page.headerData.1001 = FLUIDTEMPLATE
page.headerData.1001.file.dataWrap = ../template-{field:abc}-{register:whatever}.html
page.headerData.1001.variables …
page.headerData.1001.settings…
die finale lösung, dann habt ihr alles:
Header Data Template -> freie Wahl
FluidViewhelper
und natürlich TS via variables oder f:cObject
😉
ach so: natürlich auch non cachable Seiten…
einfach Extbase Plugin via TS einbinden
Kann es sein das: $GLOBALS[‚TSFE‘]->page[‚description‘] nicht mehr funktioniert (TYPO3 7.6.9)? Wenn ich $GLOBALS[‚TSFE‘]->page debugge sehe ich zwar, dass die gewünschte Beschreibung gesetzt wird, allerdings erscheint diese nicht im Frontend. Muss noch irgendwas beachtet werden?
Zurzeit nutze ich eine Alternative:
$this->response->addAdditionalHeaderData(
‚getMetaDescription() .'“/>‘
);
aber wäre trotzdem mal interessant zu wissen, warum $GLOBALS[‚TSFE‘]->page[‚description‘] nicht funktioniert, denn $GLOBALS[‚TSFE‘]->page[‚title‘] = $product->getMetaTitle(); funktioniert ohne Probleme.
entschuldige die späte Antwort, ich habe mich auch länger nicht mehr mit dem Thema beschäftigt. Das erscheint mir auch sehr inkonsistent. Interessant wäre auch wie sich das in 8.7 verhält.