[Frage] Eigene ViewHelper und Cache TYPO3-Version: -

  • morlock morlock
    Padawan
    0 x
    35 Beiträge
    0 Hilfreiche Beiträge
    20. 08. 2015, 10:23

    Hallo zusammen!

    Ich bin gerade dabei für Typo einen eigenen If-ViewHelper für komplexere Bedingungen zu schreiben. Das Problem scheint jetzt zu sein, dass der ViewHelper einfach die meiste Zeit gar nicht aufgerufen wird.

    Verwendet wird er in einer eigenen Extension, in der Caching für alle Actions deaktiviert ist, ebenso ist no_cache im TypoScript gesetzt.

    Zum debuggen lasse ich meinen ViewHelper die übergebenen Parameter bei jedem Aufruf in eine Textdatei schreiben. Das passiert aber nur, wenn ich den Cache leere (und zwar den System Cache!) - dann nicht mehr.

    Ich habe nun zusätzlich auch vhs installiert und rendere ein Partial mit v:render.uncache - auch das macht keinen Unterschied.
    Ich kann mir nicht vorstellen, dass das Verhalten so korrekt oder gewünscht ist, sehe aber auch nicht, wo der Fehler liegen könnte. Hat jemand eine Idee oder einen Ansatz dazu?

    Viele Grüße,
    Christian


  • 1
  • toifel toifel
    Jedi-Ratsmitglied
    0 x
    831 Beiträge
    96 Hilfreiche Beiträge
    20. 08. 2015, 13:33

    Aufgrund des MVC-Prinzips macht das aktuelle Verhalten schon Sinn und könnte so gewollt sein, denn der komplette "view"-part sollte eigentlich gar keinen Code enthalten. Dafür sind die Controller zuständig.

  • morlock morlock
    Padawan
    0 x
    35 Beiträge
    0 Hilfreiche Beiträge
    20. 08. 2015, 13:59

    Nichts für ungut, aber das ist so nicht ganz richtig, was MVC angeht. Und vor allem geht es hier um einen ViewHelper - der ist ja einzig für den View da...

  • aemka aemka
    Jedi-Ratsmitglied
    0 x
    562 Beiträge
    9 Hilfreiche Beiträge
    20. 08. 2015, 22:28

    Wenn eine Seite aus dem Cache geliefert wird, spart das Rechenzeit und dein Viewhelper muss nicht mehr aufgerufen werden, das ist absolut gewollt. Dein ViewHelper ist ja bereits auf das gecachte HTML angewandt worden. Falls du allerdings einen ViewHelper gebaut hast um bspw. die aktuelle ständig die aktuelle Uhrzeit anzuzeigen, dann hast du den falschen Weg gewählt. :-)

    http://www.aemka.de/

  • morlock morlock
    Padawan
    0 x
    35 Beiträge
    0 Hilfreiche Beiträge
    21. 08. 2015, 14:08

    Das ist mir klar. ;) Aber es geht ja wie geschrieben um einen if-ViewHelper, der komplexe Bedingungen unterstützt. Mittlerweile funktioniert das auch, den Grund kann ich allerdings nicht nachvollziehen.

    Situation war folgende:
    Mein ViewHelper wird abgeleitet vom AbstractConditionViewHelper - implementiert waren zum einen die render-Methode und eine interne protected-Methode zur Auswertung der eigentlichen Bedingung. Das war der Zustand, in dem es NICHT funktionierte.

    Nachdem ich mir die Umsetzung des Standard-IfViewHelpers angesehen habe, habe ich meinen ViewHelper daran angeglichen. Das heißt: die render-Methode ruft jetzt nur noch parent::render() auf und darüber hinaus habe ich die statische Methode "evaluateCondition" überschrieben. Funktionial hat sich nichts geändert.

    Jetzt funktioniert's.

    Da die Umstellung der Struktur nach meinem Dafürhalten nicht der Grund sein KANN (denn der ViewHelper wurde ja einfach nicht aufgerufen), muss es daran liegen, dass das Plugin danach noch mehrfach deinstalliert und neu installiert wurde. Meine Vermutung ist, dass sich dabei etwas an den Caching-Einstellungen verändert hat. Wie das wiederum zustande kommen könnte (wenn es denn der Grund ist) kann ich mir nicht erklären. Ich hatte zwar schon öfter das Phänomen, dass das Cache leeren bei der Extension-Entwicklung nicht ausreicht und man die Extension neu installieren muss, allerdings hatte ich das auch schon nach dem Hinzufügen des ViewHelpers gemacht (vorher wurde er auch gar nicht geladen) und auch das hatte keinen Effekt.

    Ergo: das Problem an sich ist behoben, die Ursache ist mir allerdings ein Rätsel - wenn noch jemand eine Idee dazu hat, ist die natürlich im Hinblick auf "künftige Probleme" trotzdem sehr willkommen ;)

  • 1