Manuell ausgeführte Cronjobs verwenden das falsche Template-Verzeichnis

  • Betroffene App
    WoltLab Suite Core

    Hallo zusammen,

    sofern ein Cronjob auf das Templatesystem zugreift, wird bei der manuellen Ausführung das ACP-Verzeichnis als Basis verwendet, wohingegen die automatische Ausführung im korrekten Verzeichnis der Anwendung sucht. Das sollte sich konsistent verhalten um "Unable to find Template" Meldungen zu vermeiden.

    VG,

    Daniel

    Nachtrag:

    Das Problem betrifft auf "Anzeigen aktualisieren".

    Entwicklung und Design moderner Webapplikationen

    kostenloser Support • Vorschläge teilen • Plugins kaufen

    Darkwood.Design

    Einmal editiert, zuletzt von Darkwood.Design (22. Juli 2018 um 14:17)

    • Offizieller Beitrag

    Gibt es ein konkretes Beispiel, bei dem eine Aufgabe unter "Anzeigen aktualisieren" zu einem Zugriff auf die Frontend-Templates führt? Der Zugriff auf Frontend-Templates aus dem ACP ist generell sehr problematisch, etwa auf Grund von Template-Gruppen, und wird daher im Normalfall auch nicht unterstützt. Bei den E-Mail-Templates haben wir extra eine Sonder-Gruppe eingerichtet, die unabhängig vom Kontext verwendet wird und daher diese Problematik vollständig umgeht.

  • Alexander Ebert 23. Juli 2018 um 11:59

    Hat das Label Rückmeldung erforderlich hinzugefügt.
  • Gibt es ein konkretes Beispiel, bei dem eine Aufgabe unter "Anzeigen aktualisieren" zu einem Zugriff auf die Frontend-Templates führt?

    Ja gibt es. Das eine betrifft eine private Endanwendung, die ich bei Bedarf zur Verfügung stellen kann. Das andere ist für WoltLab-Nutzer aber sicher kritischer und ergibt sich aus der Kombination folgender Plugins:

    woltlab.com/pluginstore/file/2712/
    Darkwood.Design
    23. Februar 2024 um 12:13
    Darkwood.Design
    8. November 2023 um 15:16

    Das "Anzeigen aktualisieren" des erweiterten Likesystems triggert die Neuberechnung der Chronik-Einträge - je nach Typ werden hier für den Inhalt Templates benötigt.

    Entwicklung und Design moderner Webapplikationen

    kostenloser Support • Vorschläge teilen • Plugins kaufen

    Darkwood.Design

  • Gibt es ein konkretes Beispiel, bei dem eine Aufgabe unter "Anzeigen aktualisieren" zu einem Zugriff auf die Frontend-Templates führt? Der Zugriff auf Frontend-Templates aus dem ACP ist generell sehr problematisch, etwa auf Grund von Template-Gruppen, und wird daher im Normalfall auch nicht unterstützt. Bei den E-Mail-Templates haben wir extra eine Sonder-Gruppe eingerichtet, die unabhängig vom Kontext verwendet wird und daher diese Problematik vollständig umgeht.

    Im WCF 2.1 konnte man im ACP auch Frontend-templates kompilieren. Ich brauchte das damals für mein Plugin, welches Template-Listener zur Verfügung stellte. Da habe ich im ACP die Frontend-Templates kompiliert um sicherzustellen, dass diese keine Syntax-Fehler enthielten. Der PR, welcher das damals löste, ist dieser hier: https://github.com/WoltLab/WCF/pull/1892

    Wenn der Cronjob entsprechend programmiert ist sollte es durchaus möglich sein, die Templates zu kompilieren.

    "A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP" — Leonard Nimoy

    • Offizieller Beitrag

    Das "Anzeigen aktualisieren" des erweiterten Likesystems triggert die Neuberechnung der Chronik-Einträge - je nach Typ werden hier für den Inhalt Templates benötigt.

    Wieso braucht es dafür ein Template, es geht hierbei doch nur um die Verarbeitung von Daten und nicht um die Anzeige. Ohne jetzt im Detail den genauen Ablauf bei der Neuberechnung zu berücksichtigen, erscheint mir das Vorhaben per sé merkwürdig? Wir verwenden in unseren Cronjobs und Anzeigen aktualisieren auch keine Templates (E-Mails im Falle von Cronjobs sind eine Ausnahme), schlicht weil es für eine reine Datenverarbeitung nicht notwendig ist.

    Um es vielleicht etwas deutlicher zu formulieren: Der Zugriff auf Templates bei der Neuberechnung von Daten erscheint mir genrell unsinnig und ist für mein Verständnis eher ein Zeichen dafür, dass an irgendeiner Stelle unbeabsichtigt Logik für die Anzeige im Frontend vorhanden ist. Gerne lasse ich mich auch vom Gegenteil überzeugen, so lange man mir die Notwendigkeit der Nutzung von Templates in diesem konkreten Schritt darlegen kann.

    Netzwerg Es geht mir eher um die grundsätzliche Nutzung von Templates beim Anzeigen aktualisieren. Der Zugriff auf die Frontend-Templates ist konzeptionell nicht vorgesehen und Konsequenz darf am Ende nicht bedeuten, auch Holzwege bis zum Ende zu gehen.

  • Um es vielleicht etwas deutlicher zu formulieren: Der Zugriff auf Templates bei der Neuberechnung von Daten erscheint mir genrell unsinnig und ist für mein Verständnis eher ein Zeichen dafür, dass an irgendeiner Stelle unbeabsichtigt Logik für die Anzeige im Frontend vorhanden ist. Gerne lasse ich mich auch vom Gegenteil überzeugen, so lange man mir die Notwendigkeit der Nutzung von Templates in diesem konkreten Schritt darlegen kann.

    Es geht darum Likes neu berechnen zu lassen, damit sie im Frontend als Erweiterte Likes angezeigt werden.

    • Offizieller Beitrag

    Es geht darum Likes neu berechnen zu lassen, damit sie im Frontend als Erweiterte Likes angezeigt werden.

    Es geht bei meiner Argumentation darum, dass die Templates für mein Verständnis gar nicht erst benötigt werden und der Code entsprechend angepasst werden sollte, damit diese eben nicht mehr verwendet werden.

  • Damit magst du Recht haben, ich denke aber dass das Erweiterte Like Plugin versucht an allen Stellen wo das Liken möglich ist u.a. auch bei der Chronik, diese neu zu berechnen.

    Vielleicht kann Batarjal mehr dazu sagen, ich habe davon nämlich keine Ahnung.

    Workaround war die besagten Templates in acp/templates zu kopieren.

  • Batarjal

    Ja das ist korrekt. Da der geteilte Inhalte immer für jeden Eintrag benötigt wird, wird dieser bereits im constructor geladen. Womöglich würde es hier erstmal helfen wenn ich dieses RequestHandler::getInstance()->isACPRequest() davor schiebe, sodass das Template bei ACP-Aufgaben nicht geladen wird. Das generelle Problem mit dem Templatesystem im ACP wird dadurch aber nicht gelöst.

    Alexander Ebert

    Ein anderes Thema ist das Erstellen von Inhalten via Cronjob. Ich habe einen Cronjob für eine Anwendung geschrieben, welcher alle paar Minuten läuft und bestimmte Inhalte des Nutzers in einen Eintrag zusammenfasst. Damit ich das Layout dafür nicht irgendwo in den Code packen muss, nutze ich dafür ein Template welches geladen wird. Wenn der Job durch das Frontend getriggert wird, funktioniert alles wunderbar - sobald man diesen dann im ACP triggert fliegt der Fehler. Hast du dazu eine Idee?

    Entwicklung und Design moderner Webapplikationen

    kostenloser Support • Vorschläge teilen • Plugins kaufen

    Darkwood.Design

  • Wenn der Job durch das Frontend getriggert wird, funktioniert alles wunderbar - sobald man diesen dann im ACP triggert fliegt der Fehler. Hast du dazu eine Idee?

    Kannst du dir nicht einfach die Template-Engine passend instantiieren? Ich hab das selbe für mein plugin gemacht, mir eine Frontend-Instanz der Template-Engine gebaut.

    "A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP" — Leonard Nimoy

  • Damit ich das Layout dafür nicht irgendwo in den Code packen muss, nutze ich dafür ein Template welches geladen wird. Wenn der Job durch das Frontend getriggert wird, funktioniert alles wunderbar - sobald man diesen dann im ACP triggert fliegt der Fehler.

    Warum legst Du das Template nicht zusätzlich auch in acp/templates ab?

    Gruß, Udo

  • Warum legst Du das Template nicht zusätzlich auch in acp/templates ab?

    Hilft auch nicht wirklich, include sucht dann z.B. immer noch in den ACP-Templates. Außerdem könnte man dann keine eigenen Templates in seinen Stil packen, ohne bede mitzuliefern. Das ist viel zu fragil.

    Wie gesagt, ich hab das selber schon gemacht. Einfach im Cronjob schauen, ob man im ACP ist und wenn ja, nicht WCF::getTPL() verwenden, sondern sich eine passende Instanz der Template-Engine konstruieren.

    "A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP" — Leonard Nimoy

  • Alexander Ebert 6. August 2018 um 10:55

    Hat das Label von Rückmeldung erforderlich auf Ist kein Fehler geändert.

Jetzt mitmachen!

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