Search the FirstSpirit Knowledge Base
Hallo zusammen,
beim Fehlermeldungen entfernen, bin ich über ein interessantes Detail gestolpert.
Als Fehler angegeben wurde eine mögliche Endlosschleife in einer CMS_ELSIF Abfrage (haha). Ohne CMS_.. wurden keine Fehler ausgegeben. Nach einigem Versuchen hab ich dann die if-Abfrage geteilt und seitdem läuft das Template ohne Fehlermeldung durch. Mir scheint, als würde hier das umschließende CMS_SET keine CMS_ELSIF vertragen.
Unten angehängt die zwei Code-Fragmente, sollte ich hier etwas gänzlich anderes übersehen haben, bin ich dankbar für die Aufklärung.
Ciao
Benedikt
Funktioniert nicht (funktioniert schon, wirft bei der Generierung allerdings einen Error):
$CMS_SET(setMedia, ltMediaRef.getMedia())$
$CMS_SET(setLinkText)$$CMS_TRIM(level:4)$
$CMS_IF(setMedia.getType() == setMedia.FILE)$
$CMS_SET(setFileData, setMedia.getFile(#global.language))$
($CMS_VALUE(setFileData.getExtension().toString.toUpperCase)$)
$CMS_ELSIF(setMedia.getType() == setMedia.PICTURE)$
$CMS_SET(setPictureData, setMedia.getPicture(#global.language).getPictureMetaData(#global.project.originalResolution))$
($CMS_VALUE(setPictureData.getExtension().toString.toUpperCase)$)
$CMS_END_IF$
$CMS_END_TRIM$$CMS_END_SET$
Fehlermeldung sinngemäß: Achtung Endlosschleife!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Funktioniert ohne Error-Meldung:
$CMS_SET(setMedia, ltMediaRef.getMedia())$
$CMS_SET(setLinkText)$$CMS_TRIM(level:4)$
$CMS_IF(setMedia.getType() == setMedia.FILE)$
$CMS_SET(setFileData, setMedia.getFile(#global.language))$
($CMS_VALUE(setFileData.getExtension().toString.toUpperCase)$)
$CMS_END_IF$
$CMS_IF(setMedia.getType() == setMedia.PICTURE)$
$CMS_SET(setPictureData, setMedia.getPicture(#global.language).getPictureMetaData(#global.project.originalResolution))$
($CMS_VALUE(setPictureData.getExtension().toString.toUpperCase)$)
$CMS_END_IF$
$CMS_END_TRIM$$CMS_END_SET$
Die "Endlosschleifenerkennung" schlägt ab einer gewissen Stack-Tiefe zu. Wahrscheinlich operiert der Code gerade an der Grenze (müsste an der Fehlermeldung zu sehen sein - die wird ausgegeben, wenn #global.debugMode auf true gesetzt wird).
Wenn das der Fall ist, kann über #global.maxStackSize (default = 50) die maximale Stacktiefe erhöht werden.
Wir haben gerade ein ganz ähnliches Problem. Über $CMS_SET(#global.maxStackSize, 100)$ wird das Problem behoben, allerdings frage ich mich, ob es generell unproblematisch ist diesen Wert zu erhöhen, oder gibt es da etwas zu beachten? Oder gibt es dazu vielleicht Erfahrungen ab welcher Verschachtelungstiefe anders vorgegangen werden muss?
Im Fall einer Endlosschleife dauert es bei erhöhtem Wert länger, bis die Erkennung zuschlägt. Im normalen Betrieb ergbit sich kein Nachteil durch die Erhöhung des Wertes.
Im normalen Ausgabekanal (HTML) konnten wir das Problem mit den Endless Loop Fehlern durch die Erhöhung der Stacksize beheben. Im Ausgabekanal für die UX-Bridge bekommen wir die Fehler allerdings nicht weg. Den Inhalt eines HTML Ausgabekanals übernehmen wir dabei wie in Re: Inhalte eines Ausgabekanals in anderen übernehmen beschrieben in den UX-Bridge Ausgabekanal.
Hier bin ich jetzt langsam echt mit meinem Latein am Ende.
Irgendeine Idee, wieso hier die Erhöhung der Stack Size nichts bewirkt?
Gruß,
Stefan
Reporte das bitte an unseren Helpdesk, vielen Dank.