senanasenana MemberComments: 233 Received thanks: 8 Member since: December 2012 edited December 2014
Hallo Community,

ich hoffe jemand kann mir hier weiterhelfen.

Ich möchte eine FAQ-Seite erstellen, die ein ganz kleines eigenes JS verwendet. Nun habe ich schon das ganze soweit, dass das Snippet im <head> der Seite integriert ist und es auch funktioniert.

Allerdings würde ich gerne aus Gründen der Ordnung, diese paar Zeilen Script eben nur auf der FAQ-Seite einbinden. Als Magento-User hätte ich das Snippet einfach in den Quelltext der Seite gepackt, aber das geht ja offenbar bei Shopware nicht, da die beiden Editoren das Script einfach rauslöschen.

Kann ich über eine If/Else Abfrage die Block-Erweiterung nur auf die eine Seite beschränken? Also sinngemäß "Wenn Seite FAQ, dann Block erweitern, sonst nix".

Ich hoffe ja, und wenn ja, wer kann mir genau sagen, wie die entsprechende Syntax lauten würde?

Danke schon mal..

Comments

  • flo.kalangoflo.kalango MemberComments: 102 Received thanks: 10 Member since: September 2012
    Hallo Senana,
    ich vermute, du verwendest für die FAQ Seite eine Shopseite, auf Basis des Standard Emotion Templates?

    Die Template Dateien für die Shopseiten befinden sich im Templates Ordner "_default/frontend/custom/...."

    Erstelle diesen Ordner "custom" in deinem eigenen Template und kopiere dir die Original - Datei "frontend/custom/header.tpl" in den erstellten Ordner.
    Aus der kopierten header.tpl löschst du alles bis auf die oberste Zeile
    {extends file='frontend/index/header.tpl'}
    
    Nun kannst diesen Code/Block einfügen und dein Script an den Block anhängen:
    {block name="frontend_index_header_javascript" append}
    <script type="text/javascript">
    Dein Script
    </script>	
    {/block}
    
    Somit wird dein Code nur innerhalb der Shopseiten geladen.

    Soll er nur auf der einen FAQ Seite geladen werden, musst du für diese Shopseite ein eigenes Template erstellen und den Code dann direkt in dieses Template einbinden.
    Eine Anleitung gibt es im WIKI hier:
    http://wiki.shopware.com/Shopseiten_det ... ale_Felder

    Damit wird der Inhalt aus deinem eigenen Template verwendet.

    VG
    Thanked by 1senana
  • senanasenana MemberComments: 233 Received thanks: 8 Member since: December 2012
    Hallo flo.kalango,

    erst mal danke für Deine Antwort.

    Die Einbindung habe ich so gemacht, wie Du es beschreibst. Allerdings wird der JS Schnipsel bei mir auf allen Seiten mit ausgegeben, was aber auch klar ist (meiner Meinung nach) denn der Seiten <head> ist ja auch bei allen Seiten gleich. Ich benutze allerdings das conexco responsive-template, und weiß nicht ob z.B. das emotion das anders handhabt, und verschiedene Seiten <head> 's hat für die unterschiedlichen Bereiche.

    Dein Hinweis mit dem "eignene Template" ist aber ein gute Idee, und das werde ich mir mal angucken.

    Ich dachte das man eventuell in den template-Dateien auch irgendwie mit if/else abfragen kann, welche Seite geladen wird...
  • flo.kalangoflo.kalango MemberComments: 102 Received thanks: 10 Member since: September 2012
    Hallo,

    wenn du so wie erklärt eine eigene header.tpl anlegst, wird deren Inhalt auch nur bei Aufruf einer der Shopseiten verwendet.

    Um im Conexco auf eigene Template Dateien zurückzugreifen, musst du im Verzeichnis templates einen Ordner "_theme" erstellen. Darin einen Unterordner "frontend/custom".
    Um eine eigene Template Datei mittel Abfrage auszugeben, gehst du so vor:
    Du kopierst dir die originale index.tpl aus dem Responsive PlugIn Verzeichnis "/engine/Shopware/Plugins/Community/Frontend/SwfResponsiveTemplate/views/frontend/custom/index.tpl" in deinen erstellten "custom" - Ordner.
    Dann benennst du die index.tpl um, z.B.in "index-ori.tpl".
    Dann eine index.tpl erstellen mit deinem gewünschten Inhalt inkl. script.
    Die benennst du z.B. mit "index_myowncontent.tpl".
    Inhalt dann in etwa so:
    <div>
    {* Custom CMS content *}
    <h1>{$sCustomPage.description}</h1>
    <div>{$sContent}</div>
    </div>
    {* Custom CMS script *}
    <script>
    Hier mein Script
    </script>
    
    Dann eine if Abfrage in einer eigenen index.tpl erstellen (nach der ID der gewünschten Shopseite (Beispiel ID=82), in etwa so:
    {extends file='frontend/index/index.tpl'}
    {* Main content *}
    {block name='frontend_index_content'}
    {if $sCustomPage.id == '82'}
    	{include file='frontend/custom/index_myowncontent.tpl'}
    {else}
    	{include file='frontend/custom/index_ori.tpl'}
    {/if}
    {/block}
    
    Dann wird bei Aufruf der Seite mit der ID=82 das Template "index_myowncontent.tpl" verwendet, sonst die originale "index.tpl".

    Viel Erfolg!

    P.S. Einen ähnlichen Beitrag gab es von mir bereits hier:
    Eigene Templates in Shopseiten
    Thanked by 1senana
  • senanasenana MemberComments: 233 Received thanks: 8 Member since: December 2012
    ...sehr cool!

    Vielen Dank, das werde ich probieren.
  • senanasenana MemberComments: 233 Received thanks: 8 Member since: December 2012
    Hallo flo.kalango,

    nochmal eine Frage:

    aktuell habe ich doch in meinem Ordner

    templates/_theme/frontend/index/header.tpl

    folgenderweise ergänzt:
    {block name="frontend_index_header_javascript_jquery" append}
    <script>
    function toggle_visibility(id) {
    var e = document.getElementById(id);
    if(e.style.display == 'block')
    e.style.display = 'none';
    else
    e.style.display = 'block';
    }
    </script>
    {/block}
    Warum kann ich nicht gleich hier die if/else Abfrage machen, etwas so:
    {block name="frontend_index_header_javascript_jquery" append}
    {if $sCustomPage.id == '82'}
    <script>
    function toggle_visibility(id) {
    var e = document.getElementById(id);
    if(e.style.display == 'block')
    e.style.display = 'none';
    else
    e.style.display = 'block';
    }
    </script>
    {else}{/if}
    {/block}
    Führt das nicht zum gleichen Ergebnis? Warum der Weg über den Custom-Ordner?
  • senanasenana MemberComments: 233 Received thanks: 8 Member since: December 2012
    Hallo flo.kalango,

    also, ich habe es getestet, und die Kurze Version, wie einen Post zuvor von mir gefragt, funktioniert tadellos!

    Super einfach so. Shopware fängt langsam an mir Spass zu machen..:thumbup:
  • flo.kalangoflo.kalango MemberComments: 102 Received thanks: 10 Member since: September 2012
    Schön!

    Der Weg von mir sollte nur die Möglichkeit der Verwendung eigener Templates für die Shopseiten aufzeigen.
    Vielleicht kannst du das an späterer Stelle noch gebrauchen.

    Der "Umweg" über den Ordner "custom" ist deshalb von Vorteil, da dein Skript bei Implementierung in die Datei "frontend/custom/header.tpl" somit von Haus aus nur bei Aufruf einer Shopseite geladen wird. Du könntest dir dann die if Abfrage sparen.

    Ach ja, das {else} zum Schluß benötigst Du nicht. Kann weggelassen werden.

    Dann weiterhin viel Spaß mit Shopware,
    viele Grüße
  • senanasenana MemberComments: 233 Received thanks: 8 Member since: December 2012
    Hallo Flo.kalamgo,

    ich habe bei mir die Datei im Ordner

    _theme/frontend/index/header.tpl

    wie beschrieben angepasst, und das Snippet erscheint nur auf der FAQ-Seite.

    Der Ordner "_theme" sollte laut Beschreibung für eine updatesichere Anpassung an das Conexco Responsive-Template eingerichtet werden.

    Ich vermute mal, das entspricht der "custom" Variante für das emotion template?!

    ...jedenfalls war eben nicht nötig, ein eigenes template anzulegen, sondern es reichte, wie hier beschrieben, einfach die header.tpl "updatesicher" zu erweitern/anzupassen.

    Also, vielen Dank nochmal.
Sign In or Register to comment.