Ergebnis 1 bis 4 von 4

Thema: bei $this->stylesheets bzw. $this->head während Frontend-Generierung reingrätschen

  1. #1
    Contao-Nutzer
    Registriert seit
    18.07.2012.
    Beiträge
    20

    Standard bei $this->stylesheets bzw. $this->head während Frontend-Generierung reingrätschen

    Guten Morgen,

    Beim Generieren des Frontends (betrifft für mich Contao 3.5x - 4.3) in fe_page wird ja per
    <?=$this->stylesheets?> bzw <?=$this->head?> bestimmte (vorher z.B. in $GLOBALS['TL_CSS'] bzw in $GLOBALS['TL_HEAD']) gespeicherte Daten verarbeitet und ausgegeben.

    Nun habe ich aber das Problem, dass ich (SEO-bedingt) die generierten
    Code:
    <link rel="stylesheet" href="assets/css/beee02e5c1d2.css">
    <script src="assets/js/9e4039d8a0c3.js"></script>
    vor </body> setzen möchte, die aber ebenso in $GLOBALS['TL_HEAD'] definierten
    Code:
    <link rel="alternate" hreflang="fr" href="https://www.[...]/">
    <link rel="alternate" hreflang="de" href="https://www.[...]/de/[...]">
    <link rel="apple-touch-icon" sizes="57x57" href="files/layout_[...]/favicon/apple-icon-57x57.png">
    im Head lassen möchte.

    Mein erster, bequemster (aber auch dreckigster) Ansatz wäre, bei der Ausgabe der Stylesheets reinzugrätschen:
    <?=preg_replace("/.../","...",$this->stylesheets) ?>
    Das funktioniert aber nicht, da preg_replace auf das generierte Objekt nicht greift. Vermutlich wird erst das preg_replace und anschließend die Generierung der Stylesheets ausgeführt.
    Gibt es eine Möglichkeit, die stylesheet-Einträge an dieser Stelle direkt zu parsen und nachträglich zu verändern?

    Mein zweiter Ansatz wäre, die (hier leider für mich fälschlicherweise) in $GLOBALS['TL_HEAD'] generierte CSS-Datei aus $GLOBALS['TL_HEAD'] in $GLOBALS['TL_CSS'] zu transferieren. Leider sind diese Dateien in initconfig.php bzw localconfig.php noch gar nicht in den Array reingeschrieben, d.h. ich weiß nicht, an welcher Stelle ich dieses Umschreiben vornehmen soll.

    Als dritter Ansatz wäre, einen Contao-Hook zu verwenden und die Methode der Generierung des Stylesheets updatesicher zu erweitern und manuell abzuändern. Da brauche ich aber Starthilfe, hier kenne ich mich nicht wirklich aus, welche Hooks ich verwende und welche Methoden ich wie (in initconfig.php?) hinzufügen soll.

    Und schließlich wäre von dort es nur ein kleiner Schritt, eine Erweiterung zu schreiben, die diese Umschreibungen vornimmt. Auch hier fehlen mir leider bisher die Erfahrungen.


    Könnt ihr mir vielleicht kurz erklären, wie ich da am Besten oder am Einfachsten (von mir aus auch dreckig...) reingrätschen kann?

    Und habt ihr vielleicht Literatur, anhand ich dieses Template-Generierungs-Kram (was wird wann abgearbeitet, wie funktioniert es mit den Templates ce_text, mod_news, mod_navigation, fe_page, ... in welcher Reihenfolge (von innen nach außen?) wird da was abgearbeitet und wie übergibt man Variablen und Klassen am Besten von innen nach außen oder von außen nach innen?
    Ich würde es gerne etwas fundierter verstehen, aktuell pfusche ich da aber meistens nur planlos rum...

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

    Standard

    Du könntest folgendes machen:

    1. Das fe_page Template ändern und
      PHP-Code:
      <?= $this->stylesheets ?>
      <?= $this
      ->mooScripts ?>
      vor
      PHP-Code:
      <?= $this->mootools ?>
      verschieben.

    2. Die CSS und JS Dateien, die du im <head> haben möchtest aus dem Seitenlayout entfernen.

    3. Ein Template namens j_head oder moo_head anlegen und dort die CSS und JS Dateien über
      PHP-Code:
      $GLOBALS['TL_HEAD'][] = '<link rel="stylesheet" href="…">';
      $GLOBALS['TL_HEAD'][] = '<script src="…"></script>'
      einbinden lassen und dieses Template dann im Seitenlayout auswählen. Oder einfach diese Tags über Zusätzliche <head>-Tags im Seitenlayout festlegen.

  3. #3
    Contao-Nutzer
    Registriert seit
    18.07.2012.
    Beiträge
    20

    Standard

    Vielen Dank, das hilft schon mal weiter.

    So kann ich problemlos neue Dateien/Skripte in den Head hinzufügen.
    Die von Contao generierte CSS-Datei wird auch korrekt bei $this->stylesheets ausgegeben.

    Allerdings komme ich so nicht an die dynamisch generierte und von Contao zusammengefasste JS dran; das passiert erst später. Die wird leider immer noch im head generiert und ich kann sie nicht irgendwoandershin verschieben.

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

    Standard

    Hm, ja blöd, das wird leider über ->head eingebunden (bzw. dort steht anfangs nur '[[TL_HEAD]]' drin und wird später mit den zusammengefassten JavaScripts ersetzt).

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
  •