JavaScript Code in Template einbinden.

Auch wenn die Frage schon oft gestellt wurde habe ich keine funktionierende Anwort gefunden.

Ich habe das Problem das sich einige Plugin mit einander nicht kompatibel sind. Wie Google Service und Trusted Shops. Hier wird dann nur noch ein Code angezeigt. Also Back to the Roots das ding direkt ins Template rein(macht für mich auch weit aus mehr sinn).

{block name="frontend_index_header_javascript" append}
   
  (function () { 
    var _tsid = 'xxxxxxxxxxxxxxxxxxxx'; 
    _tsConfig = { 
      'yOffset': '0', /* offset from page bottom */
      'variant': 'reviews', /* default, reviews, custom, custom_reviews */
      'customElementId': '', /* required for variants custom and custom_reviews */
      'trustcardDirection': '', /* for custom variants: topRight, topLeft, bottomRight, bottomLeft */
      'customBadgeWidth': '', /* for custom variants: 40 - 90 (in pixels) */
      'customBadgeHeight': '', /* for custom variants: 40 - 90 (in pixels) */
      'disableResponsive': 'false', /* deactivate responsive behaviour */
      'disableTrustbadge': 'false' /* deactivate trustbadge */
    };
    var _ts = document.createElement('script');
    _ts.type = 'text/javascript'; 
    _ts.charset = 'utf-8'; 
    _ts.async = true; 
    _ts.src = '//widgets.trustedshops.com/js/' + _tsid + '.js'; 
    var __ts = document.getElementsByTagName('script')[0];
    __ts.parentNode.insertBefore(_ts,__ts);
  })();

{/block}

Auch mit

{block name="frontend_index_header_javascript_jquery"}

habe ich es probiert.

Sogar mit

{include file='widgets/index/trustedshops.tpl'}

nichts greift. Ich habe die Doku gelesen diesse ist aber genau dafür Nutzlos. Weil ich will es ja nicht über die theme.php einbinden.

Was muss genau gemacht werden damit man JavaScript(siehe oben als Beispiel) z.B. von dem

einfügen kann.

Hallo,

du solltest statt “append” und “prepend” ausschließlich nur noch {$smarty.block.parent} benutzen.

Warum es nicht funktioniert? Weil er die geschweiften Klammern nicht als solches erkennt. JavaScript-Code sollte man auch aus Performancegründen nicht unbedingt inline einbinden. Dein Fehler dürfte aber dadurch behebbar sein, indem du um < script > und < / script > einfach noch folgendes schreibst:

{literal}

     ...

{/literal}

Ebenso fehlt ja oben noch ein “extends”-Befehl, also von welcher Datei du ableitest. Ebenso ist auch der Dateiname und Ablageort entscheidend.

Beste Grüße

Sebastian

Danke dir Sebastian. Es hat funktioniert.

{literal}

     ...

{/literal}

Aber es war ein kleiner Fehler in deinem Code Wink

Wegen der Performance, wie würdest du das machen wenn du einige an Javascript hast was an unterschiedlichen stellen eingebaut werden muss.

Hallo,

man könnte dies über ein eigenes Plugin lösen, bei dem man über ein data-Attributfeld die Werte an eine im Rahmen des Plugins verlinkte JavaScript-Datei übertragt, die das ganze dann bewerkstelligt. Alternativ kann man die JavaScript-Datei natürlich auch durch die Theme.php - Datei „verlinken“, siehe: Using CSS and JavaScript in themes Die JavaScript-Datei würde dadurch mit komprimiert werden.

Beste Grüße

Sebastian

Ich frag mal doof, warum plugin was wären die vorteile?

Hallo,

der Vorteil wäre nur, das man die Funktion so mal schnell ein- oder ausschalten könnte, wobei dies mit einem gewissen Aufwand natürlich auch über die Theme-Konfiguration möglich wäre.

Beste Grüße

Sebastian