Ich teste gerade das Real-Time-Tracking von OneStat.com in einem JTL-Shop. Bei der Einbindung des Tracking-Codes (JavaScript) ist mir ein Flüchtigkeits-Fehler unterlaufen. Die im Titel genannte gekürzte Fehlermeldung findet sich auf der jeweiligen Seite auf der das OneStat-Script einbunden wird. Ich habe das ganze fix unter [JTL-SHOP-TEMPLATE-PATH]/tpl_inc/footer.tpl eingefügt, und bekam den folgenden Fehlercode als Antwort:

Fatal error:  Smarty error: [in tpl_inc/footer.tpl line 56]: syntax
error: unrecognized tag 'var' (Smarty_Compiler.class.php,
line 590) in [...]

Das Problem ist der von OneStat gelieferte JavaScript-Code und die im JTL-Shop verwendete Smarty-Template-Engine. Genauer: die geschwungenen Klammern um den Funktionsrumpf des JavaScript Snipets verursachen den Fehler.
Um das zu vermeiden, bietet Smarty die Funktion literal:

{literal}-Tags erlauben es, einen Block wörtlich auszugeben, d.h. von der Interpretation durch Smarty auszuschliessen. Dies ist vor allem für Javascript- oder andere Blöcke nützlich, die geschwungene Klammern verwenden. Alles was zwischen den {literal}{/literal} Tags steht, wird direkt angezeigt.

Also den JavaScript-Code mit literal umschließen, und der Fehler sollte verschwinden:

<!--ONESTAT SCRIPTCODE START-->
{literal}
<script type="text/javascript">
<!--
...
OneStat_Pageview();
//-->
</script>
{/literal}
<noscript>
...

17 Antworten zu “Smarty error: [in xyz ]: syntax error: unrecognized tag ‘var’”

  1. Carsten Mohr sagt:

    Vielen Dank für den {literal}-Tipp!

  2. KC sagt:

    OH MAN!!! DANKEEEEEEEEEEE

  3. Charly sagt:

    sauber, ebenfalls vielen dank von mir – hab mir die zähne ausgebissen an dem stuff ;-) der {literal}-tipp war goldwert !!

  4. DMR sagt:

    Danke :) die kleinen sachen sind meistens doch die gemeinsten :D

  5. MissÄnn sagt:

    Super! Danke für den Tipp!!! :)

  6. E-Commerce Pro sagt:

    Man lernt nie aus ;-) Smarty hat doch so seine ganz besonderen Tücken! Danke für den {literal} Tipp, der läßt sich ja bei allem einsetzen, was mit XT-Commerce Shops und Javascript zu tun hat!

  7. Martin sagt:

    hallo,

    nach ca. 10 stunden suchen/testen wie ich den fehler nun wech bekomme, kann ich nur danken das ich diesen beitrag gefunden habe. eigentlich sehr einfach wen man den {literal} trick kennt :-) … ansonsten …. arschkarte und durchdrehen ….

    besten dank für diesen beitrag..

  8. Vanessa sagt:

    Vielen Dank für den Tip

  9. Oliver Kraft sagt:

    Vielen Dank – der Tipp ist Gold wert!

  10. Tobias sagt:

    Genialer Tip. Vielen Dank! Hat mir eine Menge Zeit erspart!

  11. buli sagt:

    Vielen Dank!
    Hatte das problem bei Lansuit v3 mit Google Tracking Code. Nach deinem Trick läuft alles nun wunderbar.

  12. Einbindung des (jquery) Slider in XT:Commerce Template - Webmaster Hilfe / Programmierer Forum sagt:

    […] wie man es beheben kann. Bei Problemen mit "Smarty" und "JQuery" hier klicken: Rettung Gru

  13. Andy sagt:

    Vielen Dank, genau das was ich gesucht habe!

  14. Maja sagt:

    Wow…!
    Auf einer Seite hat es echt was gebracht, ich hatte den Fehler in einer Bestätigungs eMail, die der Kunde nach einer Bestellung im Shop eines Freundes erhalten sollte. Der Kunde sah nach der Bestellung eine weiße Seite mit der Fehlermeldung:

    Fatal error: Smarty error: [in xtc4/mail/german/order_mail.html line 123]: syntax error: unrecognized tag: searchshield.init(document); (Smarty_Compiler.class.php, line 446) in /home/myfriend-online-de/htdocs/shop/includes/classes/Smarty_2.6.26/Smarty.class.php on line 1095

    und die Mail ging nur fehlerhaft raus Artikelauflistung fehlte).

    Jetzt ist die Fehlermeldung weg, aber die eMail enthält nun gar keinen Inhalt mehr. Ist einfach eine weiße Seite (wenn sie als HTML versendet wird).
    Wie kann ich das nun beheben?
    Irgendwie liegt der Fehler beim SearchShield Eintrag, oder so?
    Weiß jemand was?

    LG,
    Maja.

  15. NiBa sagt:

    Hallo Maja,

    also ohne das Problem jetzt näher zu erkennen scheint es doch mit dem von Dir genannten Skriptblock zu tun zu haben. Hast Du den gesamten Javacript Bereich mit einem {literal}{/literal} umschlossen?

  16. Markus sagt:

    perfekter tipp. schnell gefunden, schnelle problemlösung!
    vielen, herzlichen dank!

  17. Markus sagt:

    ps: es heißt übrigens „freigeschaltet“, nicht „freigeschalten“… ;-)

Eine Antwort schreiben