Neues Event im StyleCompiler hinzufügen

  • App
    WoltLab Suite Core

    Aktuell arbeite ich vermehrt an Erweiterungen, die Stile betreffen, was dank compile@StyleCompiler grundsätzlich auch funktioniert, allerdings hält sich der Mehrwert dieses Events doch etwas in Grenzen.

    Was mir persönlich fehlt, ist ein Event nachdem ein Stil kompiliert wurde (afterCompile), oder besser noch während des Prozesses, also innerhalb von compileStylesheet oder innerhalb des Callbacks, aber vor $content, damit ich die Möglichkeit habe, den zu schreibenden Inhalt auszulesen und/oder vor dem Schreiben noch zu verändern.

    Sollte es etwas in dieser Richtung geben, wäre es schön, wenn man das ab 3.1 (da wurden Events im StyleCompiler eingeführt) oder zumindest 5.2 machen könnte.

  • Oder gibt es vielleicht jetzt schon eine Möglichkeit, auf das Neu-Erzeugen des CSS reagieren zu können? compile@StyleCompiler ist ja leider zu früh, da ich absolut 0 Information zum Stil habe, der gerade verarbeitet wird und auch keinen CSS-Code, weil der erst anschließend generiert und gespeichert wird.

  • Ich habe hierfür mehrere Anwendungsfälle. Ein einfaches Beispiel wäre das Verändern oder Erweitern von CSS-Klassen (also Regex-basiertes Suchen und Ersetzen/Ergänzen), oder einfach die Möglichkeit, die neu generierte CSS-Datei auszulesen. Aktuell habe ich hier nur zwei Möglichkeiten: Per Cron in regelmäßigen Abständen, oder per EL und darauf hoffen, dass die CSS-Dateien zu dem Zeitpunkt noch existieren. Ersteres ist imho unnötig und letzteres nur wenig sinnvoll, da ich den Stil im Zweifelsfall mittels StyleCompiler::getInstance()->compile neu generieren muss, was halt ungünstig ist, wenn der EL, der das tut, an compile@StyleCompiler hängt.

  • Kommt sicherlich ein wenig auf den Einsatzzweck an. In meinem konkreten Fall geht es um das Font-Preloading via CSS. Aktuell regeln wir das über Header, allerdings führt das zwangsläufig dazu, dass bei jedem Seitenaufruf sämtliche Fonts vorgeladen werden, selbst wenn sie nicht benötigt sind. Darüber hinaus muss ich aktuell zwangsläufig sämtliche CSS-Dateien parsen und mir alle geladenen Schriften raussuchen. Das setzt wiederum voraus, dass ich weiß, wann eine CSS-Datei generiert wird/wurde und ich mittels EL darauf reagieren kann.

    Parallel dazu gibt es noch einen anderen Fall, für den ich etwas derartiges brauchen könnte.

    • Offizieller Beitrag

    Prinzipiell reicht dafür auch sich die filemtime des Stils zu merken und bei Änderungen die eigene Logik auszuführen. Wir fragen diese mit jeder Request so oder so ab, daher ergibt sich dadurch auch kein Performance-Nachteil.

    Ansonsten ist Font Preloading mit 5.4 standardmäßig und sauber implementiert, dadurch erübrigen sich entsprechende Hacks angesichts der neuen Version am Horizont ;)

  • Ansonsten ist Font Preloading mit 5.4 standardmäßig und sauber implementiert, dadurch erübrigen sich entsprechende Hacks angesichts der neuen Version am Horizont ;)

    Aber nicht für Kunden, die dann halt nicht auf 5.4 umsteigen wollen, aus welchen Gründen auch immer. Deswegen finde ich den Vorschlag / die Idee schon auch interessant.

  • Tim Düsterhus 28. November 2022 um 16:42

    Hat den Titel des Themas von „Neues Event Hinzufügen“ zu „Neues Event im StyleCompiler hinzufügen“ geändert.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!