FriendsOfREDAXO/tricks

Seitentitel und Metadaten anpassen mit Daten, die erst im Modul erzeugt werden

cukabeka opened this issue · 1 comments

Wenn ich im Modul erst per URL-Parameter Daten aus der Datenbank hole, kann ich diese Daten nicht ohne Weiteres vorher im Template verwenden.

Siehe https://friendsofredaxo.slack.com/archives/C1BAXLN2F/p1659107363647879?thread_ts=1658936994.386069&cid=C1BAXLN2F

Im Normalfall ist ein Template ja so aufgebaut, dass es einfach das HTML-Gerüst enthält und dann an den richtigen Stellen aus REDAXO Content eingebaut wird oder das Menü der Headerinformationen:

<!DOCTYPE html>
<html lang="<?= rex_clang::getCurrent()->getCode() ?>">
<head>
    ...
    <title>MeinSeitenTitel</title>
    ...
</head>
<body>
    <navigation>
        ...
    </navigation>
    <content>
        [REX_ARTICLE] oder <?= $this->getArticle()?>
    </content>
</body>
</html>

Nun muss nur das Generieren des Artikels vor die Klammer gezogen werden. Dann wird alles was im Modul passiert VOR dem Aufbau des HTML-Gerippes erfolgen und daraus resultierende Informationen verfügbar sein.
Dazu müssen die Daten im Modul schon via rex::setProperty('ausmodul','defaulttitel') zwischengespeichert werden, dann ist es auch beim Aufruf im Template via $this->getArticle() verfügbar.
Im Modul sieht das z.B. so aus:

    $eventID = rex_get('eventid','int',0);
    $data = \forCal\Handler\forCalHandler::getEntry($eventID);
    $project->setProperty('datenausmodul',$data->titel)

Und im Template dann so:

<?php
$content = $this->getArticle();
$navigation = ....
$titel = rex::getProperty('datenausmodul');

?>!DOCTYPE html>
<html lang="<?= rex_clang::getCurrent()->getCode() ?>">
<head>
    ...
    <title><?=$titel?></title>
    ...
</head>
<body>
    <navigation>
        <?=$navigation?>
    </navigation>
    <content>
        <?=$content?>
    </content>
</body>
</html>