Ergebnis 1 bis 6 von 6

Thema: Template Parsing in Abhängigkeit der verwendeten Templates beeinflussen

  1. #1
    Contao-Nutzer
    Registriert seit
    09.05.2024.
    Beiträge
    3

    Standard Template Parsing in Abhängigkeit der verwendeten Templates beeinflussen

    Hallo zusammen,

    ich habe hier ein kleines (oder großes?) Template Problem – es wird mit PHP-Templates und Contao 4.13.xx gearbeitet – ich bin leider nicht auf eine passendere Überschrift gekommen.

    Das Templating steckt in einer Dritt-Extension. Es wird ein Template für eine PDF-Generierung geparst.

    Das Grundtemplate heißt pdf_base und hat diesen strukturellen Aufbau:

    PHP-Code:
    <!DOCTYPE html>
    <html lang="<?php echo $this->locale ?>">
        <head>
            <?php $this->block('head'); ?>
                <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $this->charset?>" />
                [...]
            <?php $this->endblock(); ?>
        </head>
        <body>
            <?php $this->block('header'); ?>
                <?php echo $this->header?>
            <?php $this->endblock(); ?>

            <?php $this->block('body'); ?>
                <?php echo $this->body?>
            <?php $this->endblock(); ?>

            <?php $this->block('footer'); ?>
                <?php echo $this->footer?>
            <?php $this->endblock(); ?>
        </body>
    </html>
    Ich würde jetzt gerne in Abhängigkeit des Templates, das in „body“ eingeparst wird, den Header und Footer leeren.

    Beispiel:
    Wird in body "Template 1" eingeparst, soll der Header und Footer ebenfalls eingeparst werden, wird "Template 2" in body eingeparst, sollen Header und Footer geleert werden.

    Ich habe mich nun schon einige Stunden durchgewühlt, habe aber nichts passendes gefunden. In den jeweiligen Templates kann ich mit $this->getName() den jeweils eigenen Namen bestimmen, das bringt mir aber nichts.

    Ich habe das jetzt ziemlich unschön (oder kreativ ) gelöst, in dem ich folgendes mache:
    In Template 2.html:

    PHP-Code:
    if (!function_exists('doNotUseHeader')) { function doNotUseHeader() { } }
    if (!
    function_exists('doNotUseFooter')) { function doNotUseFooter() { } } 
    und im pdf_base folgendes:

    PHP-Code:
    if (function_exists('doNotUseHeader')) $doNotUseHeader = TRUE; else $doNotUseHeader = FALSE;
    if (function_exists('doNotUseFooter')) $doNotUseFooter = TRUE; else $doNotUseFooter = FALSE;

    [...]
    <?php $this->block('header'); ?>
        <?php if (!$doNotUseHeader) { echo $this->header; } ?>
    <?php $this
    ->endblock(); ?>
    [...]
    <?php $this->block('footer'); ?>
        <?php if (!$doNotUseFooter) { echo $this->footer; } ?>
    <?php $this
    ->endblock(); ?>
    Das klappt, "fühlt" sich aber ziemlich schlecht an - ich bin so gar nicht damit zufrieden :-)

    Mit den Hooks OutputBackendTemplate, OutputFrontendTemplate, ParseTemplate bin ich auch nicht weiter gekommen - da habe ich auch nichts gefunden, was mir hätte weiter helfen können.

    Hat jemand eine bessere Idee?

    Grüße
    Sebastian

  2. #2
    Contao-Fan
    Registriert seit
    24.02.2021.
    Beiträge
    506

    Standard

    Du könntest mit
    PHP-Code:
    <?php $this->extend('TemplateDerDrittExtension'); ?>

    <?php $this->block('header'); ?>
    <?php $this
    ->endblock(); ?>

    <?php $this->block('footer'); ?>
    <?php $this
    ->endblock(); ?>
    gezielt den Header und Footer leeren, indem du von diesem Template erbst und dein Template nicht den selben Namen hat.

  3. #3
    Contao-Nutzer
    Registriert seit
    09.05.2024.
    Beiträge
    3

    Standard

    Hallo,

    aber genau das möchte ich ja in Abhängigkeit davon machen, was in $this->block('body'); eingeparst wird - also nicht grundsätzlich, sondern nur, wenn in Body "Template 2", nicht aber, wenn "Template 1" eingeparst wird. Das ist bei deiner Lösung nicht gegeben, oder?

    Sebastian

  4. #4
    Contao-Fan
    Registriert seit
    24.02.2021.
    Beiträge
    506

    Standard

    Zitat Zitat von slemke Beitrag anzeigen
    Das ist bei deiner Lösung nicht gegeben, oder?
    Das ist nicht gegeben, richtig.

    Sofern du die Logik jedoch per Modul oder Hook änderst, könntest du das neue Template nutzen und damit Header und Footer skippen / sogar komplett droppen (dann brauchst du auch keine Templateanpassung).
    Sollten deine Änderungen nur über die .html5 Templates laufen, nutze einfach deine gepostete Lösung, die würde funktionieren.

    Das klappt, "fühlt" sich aber ziemlich schlecht an - ich bin so gar nicht damit zufrieden :-)
    Es fühlt sich schlecht an, da du deine Logik im Template verarbeitest, das wird mit Twig dann bissle mehr sein

    Eventuell gibt es in der Dritterweiterung Hooks, wo du dies anpassen kannst.
    Vielleicht kannst du diese Hooks als PR bereitstellen? (Sollte die Erweiterung OSS sein, kannst du auch bis dahin forken, achte aber auf die Lizenz)

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.253
    Partner-ID
    10107

    Standard

    Über einen parseTemplate Hook kannst du speichern, welche Templates geparsed wurden und dann für das parent Template entsprechende Variablen setzen lassen.
    » sponsor me via GitHub or PayPal or Revolut

  6. #6
    Contao-Nutzer
    Registriert seit
    09.05.2024.
    Beiträge
    3

    Standard

    Hallo,

    Zitat Zitat von zoglo Beitrag anzeigen
    Das ist nicht gegeben, richtig.

    Sofern du die Logik jedoch per Modul oder Hook änderst...
    Leider bin ich an einer anderen Stelle des Moduls darauf angewiesen, dass der Header kommt. Also mal so und mal so.
    Passende Hooks gibt es in diesem Modul nicht - zumindest habe ich keine gesehen :-)

    Zitat Zitat von zoglo Beitrag anzeigen
    Vielleicht kannst du diese Hooks als PR bereitstellen? (Sollte die Erweiterung OSS sein, kannst du auch bis dahin forken, achte aber auf die Lizenz)
    OSS ist die Erweiterung leider nicht, aber ich stehe im Kontakt mit dem Autor (der aktuell aber im Urlaub ist :-))

    Zitat Zitat von Spooky Beitrag anzeigen
    Über einen parseTemplate Hook kannst du speichern, welche Templates geparsed wurden und dann für das parent Template entsprechende Variablen setzen lassen.
    Das werde ich mir nochmal genauer ansehen, das erscheint mir aktuell die beste Lösung.
    Ausserdem kann ich weiter lernen :-)

    Danke für euren Input!

    Sebastian

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •