index.tpl um Wrap erweitern / eigene Blöcke erweitern

Hallo zusammen,

da ich mich noch nicht so gut mit shopware auskenne, wende ich mich an das Forum und hoffe, dass mir jemand weiterhelfen kann.
Ich würde mein eigenes Theme gerne etwas anpassen. Abgeleitet ist es vom Responsive-Theme.
Im Ordner

themes/Frontend/meinTheme/frontend/detail

findet man eine index.tpl, die ich gerne um einen Wrap erweitern würde. Der Block, soll quasi alle Blöcke in dieser index.tpl umfassen. Wie ich anhand der Dokumentation bereits gelernt habe, kann man lediglich die Inhalte von Blöcken überschreiben, oder erweitern. Außerhalb dieser Blöcke kann man nichts schreiben, was später auch angezeigt wird. Das heißt ich benötige zwei eigene/selbstkreierte Blöcke, z.B. wie in unterer Darstellung. Meine gewünschten Ergänzungen habe ich jeweils entsprechend kommentiert, oder ich müsste mit den ersten Block schnappen und das Wort „prepend“ ergänzen um da den Anfangs-Wrap zu setzen und im untersten Element ein „append“ setzen. Doch könnte ich mir vorstellen, dass das schnell unübersichtlich wird. 

{extends file='parent:frontend/index/index.tpl'}

##### HIER hätte ich gerne einen Block #####
{block name='anfangWrap'}
    
{/block}
##### END HIER hätte ich gerne einen Block #####

{* Custom header *}
{block name='frontend_index_header'}
    {include file="frontend/detail/header.tpl"}
{/block}

{* Modify the breadcrumb *}
{block name='frontend_index_breadcrumb_inner' prepend}
    {block name="frontend_detail_breadcrumb_overview"}
        {if !{config name=disableArticleNavigation}}
            {$breadCrumbBackLink = $sBreadcrumb[count($sBreadcrumb) - 1]['link']}
            
                
                {s name='DetailNavIndex' namespace="frontend/detail/navigation"}{/s}
            
        {/if}
    {/block}
{/block}

##### HIER hätte ich gerne einen Block #####
{block name='endeWrap'}
    
{/block}
##### END HIER hätte ich gerne einen Block #####

Folgende Fragen zusammengefasst:

Kann man selbstkreierte Blöcke erstellen, wenn ja, wie geht das?
Muss ich mit pre- und append arbeiten, weil es anders nicht funktioniert?
Gibt es eine bessere Lösung?

Viele Grüße wtjsh

@wtjsh schrieb:

Hallo zusammen,

da ich mich noch nicht so gut mit shopware auskenne, wende ich mich an das Forum und hoffe, dass mir jemand weiterhelfen kann.
Ich würde mein eigenes Theme gerne etwas anpassen. Abgeleitet ist es vom Responsive-Theme.
Im Ordner

themes/Frontend/Gbsicherheitstechnik/frontend/detail

findet man eine index.tpl, die ich gerne um einen Wrap erweitern würde. Der Block, soll quasi alle Blöcke in dieser index.tpl umfassen. Wie ich anhand der Dokumentation bereits gelernt habe, kann man lediglich die Inhalte von Blöcken überschreiben, oder erweitern. Außerhalb dieser Blöcke kann man nichts schreiben, was später auch angezeigt wird. Das heißt ich benötige zwei eigene/selbstkreierte Blöcke, z.B. wie in unterer Darstellung. Meine gewünschten Ergänzungen habe ich jeweils entsprechend kommentiert, oder ich müsste mit den ersten Block schnappen und das Wort „prepend“ ergänzen um da den Anfangs-Wrap zu setzen und im untersten Element ein „append“ setzen. Doch könnte ich mir vorstellen, dass das schnell unübersichtlich wird. 

{extends file=‚parent:frontend/index/index.tpl‘}

HIER hätte ich gerne einen Block

{block name=‚anfangWrap‘}

{/block}

END HIER hätte ich gerne einen Block

{* Custom header *}
{block name=‚frontend_index_header‘}
{include file=„frontend/detail/header.tpl“}
{/block}

{* Modify the breadcrumb *}
{block name=‚frontend_index_breadcrumb_inner‘ prepend}
{block name=„frontend_detail_breadcrumb_overview“}
{if !{config name=disableArticleNavigation}}
{$breadCrumbBackLink = $sBreadcrumb[count($sBreadcrumb) - 1][‚link‘]}

{s name=‚DetailNavIndex‘ namespace=„frontend/detail/navigation“}{/s}

{/if}
{/block}
{/block}

HIER hätte ich gerne einen Block

{block name=‚endeWrap‘}

{/block}

END HIER hätte ich gerne einen Block

Folgende Fragen zusammengefasst:

Kann man selbstkreierte Blöcke erstellen, wenn ja, wie geht das?
Muss ich mit pre- und append arbeiten, weil es anders nicht funktioniert?
Gibt es eine bessere Lösung?

Viele Grüße wtjsh

Hallo,

man sollte eigentlich immer versuchen, prepend oder append zu nutzen. Wenn du nur den Blocknamen hinschreibst, überschreibst du ja den Block der Basisdatei. Wird aber bei einem Update durch Shopware etwas am Inhalt des Blocks geändert, würdest du die Änderung ja nie erhalten, da du sie überschreibst. Um wirklich updatesicher zu bleiben, sollte man immer prepend oder append nutzen.

Auf einen Block sowohl mittels prepend als auch append zu gehen funktioniert nicht. Da müsstest du eher folgendes Nutzen:

{block name='frontend_index_header'}
     Inhalt davor
     {$smarty.block.parent}
     Inhalt dahinter
{/block}

Eigene Blöcke kannst du nur innerhalb von bereits existierenden Blöcken erstellen.

Beste Grüße

Sebastian

Hallo Sebastian,

vielen Dank für deine schnelle Antwort. Ich habe es direkt einmal ausprobiert, doch scheint das bei mir nicht wirklich zu helfen. Bei mir gibt es direkt einen Fehler, wenn ich die index.tpl in meinem Theme-Ordner abspeichere

themes/Frontend/ meinTheme /frontend/detail/ index.tpl 

und diese mit der extends-Zeile um das Wort “parent” erweitert habe, …

{extends file=’ parent: frontend/index/index.tpl’}

…selbst wenn nur die extends-Zeile eingegeben wird, so ist der Detailblock in Luft aufgelöst. Sprich es wird kein Inhalt ausgegeben. Ich gehe davon aus, dass wenn ich das Wort “parent” mit einfüge und in dem gewünschten Block ein “prepend” oder “append” einsetze, dass die alte Datei nur ergänzt wird und nicht überschrieben. 

Mein Code sieht sieht wie folgt aus:

{extends file='parent:frontend/index/index.tpl'}

{* Custom header *}
{block name='frontend_index_header' prepend}
  
{/block}

{block name='frontend_index_content' append}
  
{/block}

Mehr steht nicht drin. Warum wird dann aber der ganze Inhalt gelöscht?

Beste Grüße zurück

@wtjsh schrieb:

Hallo Sebastian,

vielen Dank für deine schnelle Antwort. Ich habe es direkt einmal ausprobiert, doch scheint das bei mir nicht wirklich zu helfen. Bei mir gibt es direkt einen Fehler, wenn ich die index.tpl in meinem Theme-Ordner abspeichere

themes/Frontend/ meinTheme /frontend/detail/ index.tpl 

und diese mit der extends-Zeile um das Wort „parent“ erweitert habe, …

{extends file=’ parent: frontend/index/index.tpl’}

…selbst wenn nur die extends-Zeile eingegeben wird, so ist der Detailblock in Luft aufgelöst. Sprich es wird kein Inhalt ausgegeben. Ich gehe davon aus, dass wenn ich das Wort „parent“ mit einfüge und in dem gewünschten Block ein „prepend“ oder „append“ einsetze, dass die alte Datei nur ergänzt wird und nicht überschrieben. 

Mein Code sieht sieht wie folgt aus:

{extends file=‚parent:frontend/index/index.tpl‘}

{* Custom header *}
{block name=‚frontend_index_header‘ prepend}

{/block}

{block name=‚frontend_index_content‘ append}

{/block}

Mehr steht nicht drin. Warum wird dann aber der ganze Inhalt gelöscht?

image

Beste Grüße zurück

Hallo,

ich verstehe nicht so recht, wieso du meine Lösung nicht genommen hast, also:

{extends file='parent:frontend/index/index.tpl'}

{block name='frontend_index_header'}
     
     {$smarty.block.parent}
     
{/block}

Diese würde, soweit ich das bei dir verstanden habe, genauso das machen, was du willst…

Warum speicherst du die Datei „index.tpl“ in „themes/Frontend/ meinTheme /frontend/detail“ ab, diese müsste doch in „themes/Frontend/ meinTheme /frontend/index“ abgespeichert, sonst würde doch der extends - Befehl keinen Sinn ergeben?

Beste Grüße

Sebastian

Steht der Block “frontend_index_header” für die gesamte index.tpl-Datei im Detail-Ordner?

Ich habe es mit deiner Variante bereits versucht, doch das funktioniert einfach nicht. Es wird einfach kein Inhalt ausgegeben.

@wtjsh schrieb:

Steht der Block „frontend_index_header“ für die gesamte index.tpl-Datei im Detail-Ordner?

Ich habe es mit deiner Variante bereits versucht, doch das funktioniert einfach nicht. Es wird einfach kein Inhalt ausgegeben.

image

Hallo,

hast du dir meine Nachricht wirklich richtig durchgelesen? Diese Datei müsste dann aber auch im Verzeichnis „themes/Frontend/ meinTheme /frontend/ index“ liegen.

Möchtest du die index.tpl im detail - Ordner (themes/Frontend/ meinTheme /frontend/ detail ) anpassen, müsstest du logischerweise natürlich:

{extends file='parent:frontend/detail/index.tpl'}

{block name='frontend_index_header'}
     
     {$smarty.block.parent}
     
{/block}

verwenden.

Beste Grüße

Sebastian

1 „Gefällt mir“

@sschreier schrieb:

{extends file=‚parent:frontend/detail/index.tpl‘}

Ich dachte mir fast, dass das was mit dem Pfad zu tun hat. Doch dachte ich, dass der Pfad immer genauso heißen muss wie in der Originaldatei aus dem Bare-Verzeichnis. Jetzt klappt es zumindest, dass es gewrapped wird. Allerdings ist frontend_index_header  tatsächlich ein Header, in welchem der Seitenheader mit Metaangaben gewrapped wird.

Das heißt, ich muss dann doch in mindestens zwei Blöcke gehen und mit prepend und append arbeiten. Ist an sich auch kein Problem, nur fänd ich es schöner, wenn man eigene Blockelemente erstellen/konfigurieren könnte.

Ich danke dir dennoch vielmals für deine Hilfe und ich kann so zumindest schon einmal weiter arbeiten. 

Falls jemand evtl. doch weiß, ob man eigene Blöcke konfigurieren kann , dann wäre ich überglücklich :).

@wtjsh schrieb:

@sschreier schrieb:

{extends file=‚parent:frontend/detail/index.tpl‘}

Ich dachte mir fast, dass das was mit dem Pfad zu tun hat. Doch dachte ich, dass der Pfad immer genauso heißen muss wie in der Originaldatei aus dem Bare-Verzeichnis. Jetzt klappt es zumindest, dass es gewrapped wird. Allerdings ist frontend_index_header  tatsächlich ein Header, in welchem der Seitenheader mit Metaangaben gewrapped wird.

Das heißt, ich muss dann doch in mindestens zwei Blöcke gehen und mit prepend und append arbeiten. Ist an sich auch kein Problem, nur fänd ich es schöner, wenn man eigene Blockelemente erstellen/konfigurieren könnte.

Ich danke dir dennoch vielmals für deine Hilfe und ich kann so zumindest schon einmal weiter arbeiten. 

Falls jemand evtl. doch weiß, ob man eigene Blöcke konfigurieren kann , dann wäre ich überglücklich :).

Hallo,

dann passt du eben einen anderen Block mit meinem Code-Schnipsel an. Und wie du bei meinem Beispiel gesehen hast, ist es überhaupt nicht nötig, zwei Blöcke zu nutzen.

Ich habe dir doch aber bereits die Antwort zu den „eigenen Blöcken“ gegeben, siehe: „Eigene Blöcke kannst du nur innerhalb von bereits existierenden Blöcken erstellen“ (da Sie ja sonst in der Basisdatei im Bare - Theme hinzugefügt werden müssten, das aber nicht updatesicher wäre). Und ja, ich weiss, das es nur so geht und keine andere Möglichkeit gibt (außer du baust dir ein eigenes Theme, das weder vom Responsiven noch vom Bare - Theme ableitet, wo du dann aber auch alles selbst machen müsstest).

Beste Grüße

Sebastian

 

Hallo Sebastian,

dadurch, dass ich nur einen bestimmten Teil aus der „index.tpl“ in dem Ordner „detail“ wrappen wollte, kann ich dein Snippet an dieser Stelle oder auch in einer anderen Datei nicht verwenden um das zu erreichen, was mein Ausgangsziel gewesen ist. Dein Snippet ist aber wirklich Gold wert, daher habe ich mir den auch in meine Snippet-Sammlung abgelegt. Danke dir nochmals sehr dafür.

Der Teil, den ich wrappen wollte ist der im untenstehenden Screenshot. Der rot umfasste Bereich sollte einen weißen Hintergrund bekommen, daher muss ich mit prepend und/oder append arbeiten.

Mein Code sieht aus wie folgt –>

{extends file='parent:frontend/detail/index.tpl'}

{block name='frontend_detail_index_header' prepend}
	
{/block}

{block name="frontend_detail_index_bundle" prepend}
     
{/block}

Ich denke, dass das für meinen Fall die einzige Lösung ist. Ich bin halt nur davon ausgegangen, dass man auch das Basistheme um eigene Blöcke erweitern kann, auch wenn du bereits geschrieben hast, dass das nicht geht.

Dein Satz –>

@sschreier schrieb:

 

„Eigene Blöcke kannst du nur innerhalb von bereits existierenden Blöcken erstellen“

soll bedeuten, dass ich in vorhandenen Blöcken neue ausgedachte Blöcke erstellen kann? In etwa so wie hier?

        {block name=‚frontend_detail_index_header‘ prepend}
                 {block name=’ mein_ausgedachter_block’}…{/block}

            …

        {/block}

Ich verstehe nun auf jedenfall, warum ich nicht einfach einen eigenen Block außerhalb bestehender Blöcke setzen kann, da Shopware ja gar nicht wissen kann, wo ich den Block platziert haben möchte.

Sei bitte nicht all zu genervt von mir. Doch bin ich wirklich noch total blutige Anfängerin.

Viele Grüße

Wenn du etwas stylen möchtest, warum nutzt du dann Struktur-Veränderungen?

Wenn das Weiß sein soll, dann müsstest eine all.less in deinem Theme unter frontend/_public/src/less anlegen mit dem Inhalt:

@import 'detail';

Und daneben eine detail.less mit dem Inhalt:

.product--details .product--header,
.product--detail-upper
{
    background-color: white;
    .unitize-padding(10, 10, 10, 10);
}

 

1 „Gefällt mir“

Hallo steinsoftware,

die entsprechenden .less-Dateien habe ich auch angelegt und gestyled. Ich benötigte nur einen Wrap, der mit den Bereich einfasst, der weiß gesetzt werden soll. Zuvor gab es keinen Container, der nur den oberen Teil umfasst hat. Du hast natürlich recht, dass man auch zwei Teile so hätte stylen können, wie du das gemacht hast. Ich finde es nur schöner, wenn zusammengehörige Bereiche auch entsprechend gewrapped sind. Aber vllt. werde ich mir das doch noch mal überlegen, es auf deine Weise zu machen. Bisher sieht es durch meinen eigenen Wrap wie folgt aus:

.detailWrap {
    background-color: #fff;
    .unitize-padding(0, 30);
    .unitize-margin(0, 0, 20, 0);
}

Viele Grüße