# Smarty Blöcke verschieben / AGB an Seitenende verschieben

**URL:** <https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195>\
**Category:** Themes & Design\
**Created:** [13. Juli 2016 um 11:50 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195 "2016-07-13T11:50:17Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Synonymous](https://avatars.discourse-cdn.com/v4/letter/s/57b2e6/32.png) [@Synonymous](https://forum.shopware.com/u/Synonymous)\
**Post date:** [13. Juli 2016 um 11:50 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/1 "2016-07-13T11:50:17Z")

</div>

Hallo zusammen,

Ich würde gerne in der Checkout-Confirmation die AGB Bestätigung an das Seitenende verschieben. Allerdings mißfällt es mir sehr dafür das gesamte /checkout/confirm.tpl zu überladen. Ich würde es schöner finden, wenn ich lediglich die Blöcke ohne Inhalte umsortieren könnte und die Inhalte automatisch geerbt werden.

Kennt hier vielleicht jemand einen Kniff?

Danke & LG

---

<div class="post-metadata">

**Author:** ![steinsoftware](https://avatars.discourse-cdn.com/v4/letter/s/b487fb/32.png) [@steinsoftware](https://forum.shopware.com/u/steinsoftware)\
**Post date:** [13. Juli 2016 um 12:23 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/2 "2016-07-13T12:23:21Z")

</div>

Genau so soll man es ja auch machen:

[https://developers.shopware.com/designers-guide/](https://developers.shopware.com/designers-guide/)

---

<div class="post-metadata">

**Author:** ![Synonymous](https://avatars.discourse-cdn.com/v4/letter/s/57b2e6/32.png) [@Synonymous](https://forum.shopware.com/u/Synonymous)\
**Post date:** [13. Juli 2016 um 13:03 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/3 "2016-07-13T13:03:56Z")

</div>

Vielleicht war die Frage nicht klar formuliert…  
Inheritance ist klar. Es geht lediglich darum wie man die REIHENFOLGE der Blöcke innerhalb eines Templates ändern kann, ohne den gesamten Markup in das neue Template zu übernehmen, um hier bei Updates auf der sicheren Seite zu sein.

Das Ändern von Inhalten einzelner Blöcke durch Vererbung ist nicht das Thema.

Danke & LG

---

<div class="post-metadata">

**Author:** ![steinsoftware](https://avatars.discourse-cdn.com/v4/letter/s/b487fb/32.png) [@steinsoftware](https://forum.shopware.com/u/steinsoftware)\
**Post date:** [13. Juli 2016 um 13:20 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/4 "2016-07-13T13:20:52Z")

</div>

> REIHENFOLGE

Achso.

Ja, da ist man an den Grenzen des Systems… Mir ist nichts bekannt. I

ch versuche immer mit less die Positionen zu ändern (ein float:right; ändert ja u.U. die Reihenfolge aller Elemente einer „Zeile“), aber auch mit positioning und margins und guten Kommentaren drumherum kann man ab und zu was erreichen. Wenn es jedoch zu viel gefrickel wird, dann opfer ich lieber etwas Update-Sicherheit gegenüber der Übersichtlichkeit.

---

<div class="post-metadata">

**Author:** ![Synonymous](https://avatars.discourse-cdn.com/v4/letter/s/57b2e6/32.png) [@Synonymous](https://forum.shopware.com/u/Synonymous)\
**Post date:** [13. Juli 2016 um 13:23 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/5 "2016-07-13T13:23:30Z")

</div>

CSS gefällt mir nicht wirklich als Lösung - ist ja nur ein Workaround und eigentlich ein falsches Werkzeug.  
Ich kann nicht glauben, dass die Smarty Inheritance keine Option bietet, einfach den Inhalt des Parent-Blocks auszugeben. Ich dachte es wäre mit smarty.block.parent möglich, allerdings bezieht sich das offenbar&nbsp;auf den übergeordneten Block des aktuellen Templates und nicht auf den “echten”&nbsp;Parent.

```
{extends file="parent:frontend/checkout/confirm.tpl"}

{block name='frontend_index_content'}
    

        {* Error messages *}
        {block name='frontend_checkout_confirm_error_messages'}
            {$smarty.block.parent}
        {/block}

        {* Product table *}
        {block name='frontend_checkout_confirm_product_table'}
            {$smarty.block.parent}
        {/block}

        {* Confirm form *}
        {block name='frontend_checkout_confirm_form'}
            {$smarty.block.parent}
        {/block}

    
{/block}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![hec](https://avatars.discourse-cdn.com/v4/letter/h/e274bd/32.png) [@hec](https://forum.shopware.com/u/hec)\
**Post date:** [13. Juli 2016 um 13:40 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/6 "2016-07-13T13:40:18Z")

</div>

Daran bin ich auch verzweifelt … irgendwann habe ich aufgegeben und es per JavaScript gelöst (ja, ich weiß, ist auch nicht schön):

```
if (($('.tos--panel')) && ($('#hecomm-tos-at-bottom'))) {
    var tosPanel = $('.tos--panel').detach();
    $('#hecomm-tos-at-bottom').replaceWith(tosPanel);
}

```

Falls du eine schöne Lösung findest, gib bitte Bescheid.

Danke und Grüße,  
Sven

---

<div class="post-metadata">

**Author:** ![Synonymous](https://avatars.discourse-cdn.com/v4/letter/s/57b2e6/32.png) [@Synonymous](https://forum.shopware.com/u/Synonymous)\
**Post date:** [13. Juli 2016 um 14:16 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/7 "2016-07-13T14:16:41Z")

</div>

![Undecided](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/undecided.png "Undecided")…  
Nein, bisher nichts rausgefunden. Nur das smarty.block.parent nicht funktioniert wie erwartet, sondern den gesamten Inhalt des Parent Templates zurückliefert (nicht nur den Block). Also entweder es hat da einen Smarty Bug oder es liegt an der Vererbungsstruktur über mehrere Themes. Jedenfalls wäre smarty.block.parent genau für diesen Zweck gedacht…

---

<div class="post-metadata">

**Author:** ![Synonymous](https://avatars.discourse-cdn.com/v4/letter/s/57b2e6/32.png) [@Synonymous](https://forum.shopware.com/u/Synonymous)\
**Post date:** [13. Juli 2016 um 14:18 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/8 "2016-07-13T14:18:05Z")

</div>

Hab dazu auch einen Thread bei Stackoverflow gefunden - leider auch ohne Lösung:  
[http://stackoverflow.com/questions/31413283/smarty-templates-how-to-change-the-order-of-blocks-in-child-template](http://stackoverflow.com/questions/31413283/smarty-templates-how-to-change-the-order-of-blocks-in-child-template)

---

<div class="post-metadata">

**Author:** ![MSH](https://avatars.discourse-cdn.com/v4/letter/m/e19b73/32.png) [@MSH](https://forum.shopware.com/u/MSH)\
**Post date:** [19. März 2017 um 22:53 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/9 "2017-03-19T22:53:54Z")

</div>

Habt ihr eine Lösung gefunden? Würde auch gerne die AGB direkt über den Bestellbutton schieben.

---

<div class="post-metadata">

**Author:** ![team2](https://avatars.discourse-cdn.com/v4/letter/t/c5a1d2/32.png) [@team2](https://forum.shopware.com/u/team2)\
**Post date:** [15. Juni 2017 um 10:42 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/10 "2017-06-15T10:42:01Z")

</div>

Haben wir auch gerade versucht mit der capture-Methode aus dem stackoverflow Link, leider funktionert es nicht wirklich.

Einzige unschöne Lösung auf Template-Ebene momentan wäre, das Originaltemplate nicht zu beerben sondern ganz zu überschreiben.

Gibt’s denn keine vernünftige Lösung?

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [15. Juni 2017 um 11:05 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/11 "2017-06-15T11:05:18Z")

</div>

Das Problem ist, dass die checkbox nicht in einem eigenen block ist und dass sich das Formular nicht erst am Ende der Seite schließt.

Blöcke verschieben funktioniert aber - am Beispiel des submit Buttons im Filter - so:&nbsp;[https://dpaste.de/qaxJ](https://dpaste.de/qaxJ)

Viele Grüße

---

<div class="post-metadata">

**Author:** ![Synonymous](https://avatars.discourse-cdn.com/v4/letter/s/57b2e6/32.png) [@Synonymous](https://forum.shopware.com/u/Synonymous)\
**Post date:** [20. Juni 2017 um 14:56 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/12 "2017-06-20T14:56:05Z")

</div>

Einzige Lösung ist aktuell das gesamte Template zu überladen und nicht nur Blöcke zu ersetzen…&nbsp;

---

<div class="post-metadata">

**Author:** ![gezeichnet](https://avatars.discourse-cdn.com/v4/letter/g/e19b73/32.png) [@gezeichnet](https://forum.shopware.com/u/gezeichnet)\
**Post date:** [28. Februar 2018 um 12:55 UTC](https://forum.shopware.com/t/smarty-blocke-verschieben-agb-an-seitenende-verschieben/38195/13 "2018-02-28T12:55:19Z")

</div>

Die angegeben Methode mit `{capture}` funktioniert theoretisch schon.

Ich habe einen workaround, habe diesen auch mal bei stackoverflow gepostet, der komplettheit halber aber auch noch mal hier, mit direktem Bezug auf Shopware.  
Ein direktes `callen` der blöcke ist danach immernoch nicht möglich, aber man muss nicht das gesamte markup kopieren.

Als Beispiel nutze ich hier die `frontend/listing/index.tpl`, dort soll der `banner`&nbsp;verschoben werden.

```
{extends file="parent:frontend/listing/index.tpl"}

{*
	erbe den block, der verschoben werden soll
	und gebe ihm ein paar zusätzliche funktionen
*}
{block name='frontend_index_breadcrumb'}
	{* definiere eine funktion, die genauso heißt wie der block, um sie später wieder zu finden*}
	{function name="block__frontend_index_breadcrumb"}
		{* definiere einen inneren block, um an anderen stellen von hier zu erben *}
		{block name='frontend_index_breadcrump_caller'}
			{* call parent block *}
			{$smarty.block.parent}
		{/block}
	{/function}
{/block}

{*
   der banner soll hinter die topseller
*}
{block name="frontend_listing_index_topseller" append}
    {* rufe die funktion auf *}
	{call name="block__frontend_listing_index_banner"}
{/block}

```

Achtung! wenn an späterer stelle nocheinmal der block `frontend_listing_index_banner` aufgerufen wird (in plugins z.B.) wird der Inhalt an der ursprünglichen Stelle dargestellt. Um an der neuen Stelle darzustellen, muss der neue `block` genutzt werden.

Dazu müsste in der Theme.php `protected $injectBeforePlugins = false;` gesetzt werden, dann kann man die Plugin templates überschreiben, und das plugin anweisen einen anderen `block` zu nutzen.
