# Individuelles Layout / Kategorie

**URL:** <https://forum.shopware.com/t/individuelles-layout-kategorie/38887>\
**Category:** Themes & Design\
**Created:** [8. August 2016 um 17:04 UTC](https://forum.shopware.com/t/individuelles-layout-kategorie/38887 "2016-08-08T17:04:56Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![moerv](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@moerv](https://forum.shopware.com/u/moerv)\
**Post date:** [8. August 2016 um 17:04 UTC](https://forum.shopware.com/t/individuelles-layout-kategorie/38887/1 "2016-08-08T17:04:56Z")

</div>

Hallo zusammen,

momentan arbeite ich an einer Template File für ein individuelles Layout für das Listing.&nbsp;  
Das Ziel soll es sein, bestimmte&nbsp;Produkte ohne Preise auszugeben.

Folgende Anleitung scheint mir veraltet?!:  
[http://community.shopware.com/Creating-a-custom-category-listing\_detail\_1233.html](http://community.shopware.com/Creating-a-custom-category-listing_detail_1233.html)

Ich bin jetzt so vorgegangen, dass ich eine Datei mit dem Namen **box-free-article.tpl** &nbsp;angelegt habe.  
In diese Datei habe ich den Inhalt der **box-basic.tpl** kopiert.

In der box-article.tpl habe ich dann folgende Abfrage hinzugefügt:

```
{if $sCategoryContent.template == "listing_free_articles.tpl"} 
    {include file="frontend/listing/product-box/box-free-article.tpl"}

```

Alles super, bis auf die kleine Ausnahme, dass sich die letzte Box&nbsp;der ersten Reihe 2% (.product–box{ margin: 2% 0 0 2%&nbsp;}) nach unten schiebt.  
Obwohl das Elternelement (.listing{ margin: -2% 0 0 -2% }) das wieder ausgleichen sollte.

Ich habe noch keine Templateänderungen vorgenommen, ausser **box-free-article.tpl** zu erstellen und den Inhalt der **box-basic.tpl** einzufügen.

Die Abfrage habe ich auch in folgendes abgeändert:

```
{if $sCategoryContent.template == "listing_free_articles.tpl"} 
    {include file="frontend/listing/product-box/box-minimal.tpl"}

```

Führte zum selben Fehler, obwohl es der identische Aufruf ist wie:

```
{elseif $productBoxLayout == 'minimal'}
    {include file="frontend/listing/product-box/box-minimal.tpl"}

```

![](https://picload.org/image/rrlpwpdr/bildschirmfoto2016-08-08um18.5.png)

Hat jemand sich schon daran versucht und kann mir bei meinem Problem weiterhelfen?

Vielen Dank und einen schönen Abend.

&nbsp;

---

<div class="post-metadata">

**Author:** ![Philipp\_Schuch](https://avatars.discourse-cdn.com/v4/letter/p/8797f3/32.png) [@Philipp\_Schuch](https://forum.shopware.com/u/Philipp_Schuch)\
**Post date:** [9. August 2016 um 07:36 UTC](https://forum.shopware.com/t/individuelles-layout-kategorie/38887/2 "2016-08-09T07:36:11Z")

</div>

Hallo,

schau Dir am besten mal die Dokumentation in den DevDocs an. Das solltest Du besser über die Vererbung lösen.

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

Sonnige Grüße,  
Phil

---

<div class="post-metadata">

**Author:** ![moerv](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@moerv](https://forum.shopware.com/u/moerv)\
**Post date:** [9. August 2016 um 09:17 UTC](https://forum.shopware.com/t/individuelles-layout-kategorie/38887/3 "2016-08-09T09:17:47Z")

</div>

Hallo Phil,

danke für deine Antwort.&nbsp;

Ich bin jetzt nach folgender Beschreibung vorgegangen:  
[Example: Custom listing page](https://developers.shopware.com/designers-guide/custom-listing-page/).

Hat auch den Fehler beseitigt. Allerdings nur für Seite 1.  
Bei eingestelltem Infinite Scroll werden die nachzuladenden Artikel ohne eigenes Template und mit dem voreingestellten&nbsp;Produktlayout geladen.  
Nicht so bei deaktiviertem Infinite Scroll.

Hat jmd. eine Idee woran es&nbsp;liegen kann?

---

<div class="post-metadata">

**Author:** ![Philipp\_Schuch](https://avatars.discourse-cdn.com/v4/letter/p/8797f3/32.png) [@Philipp\_Schuch](https://forum.shopware.com/u/Philipp_Schuch)\
**Post date:** [9. August 2016 um 14:25 UTC](https://forum.shopware.com/t/individuelles-layout-kategorie/38887/4 "2016-08-09T14:25:28Z")

</div>

Hey,

ich denke die Datei die Du suchst ist die **frontend/listing/listing\_ajax.tpl**.

Sonnige Grüße,  
Phil

---

<div class="post-metadata">

**Author:** ![moerv](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@moerv](https://forum.shopware.com/u/moerv)\
**Post date:** [12. August 2016 um 09:14 UTC](https://forum.shopware.com/t/individuelles-layout-kategorie/38887/5 "2016-08-12T09:14:27Z")

</div>

Hallo,

das hat nicht den gewünschten Erfolg gebracht. Habe mal recherchiert und habe ein paar weitere Posts mit dem Problem gefunden.  
Leider keinen mit einer Lösung.

[https://forum.shopware.com/discussion/27920/listing-anzeige-veraendern](https://forum.shopware.com/discussion/27920/listing-anzeige-veraendern)

Stoße immer wieder auf&nbsp;Enlight\_Controller\_Action\_PostDispatchSecure\_Widgets, allerdings kann ich damit nichts anfangen. Auch suchen hat mir nicht weitergeholfen.

Sollte die Variabel **{$productBoxLayout}** nach Anpassung in meiner **“custom\_listing.tpl”** nicht so erhalten bleiben?

Beim Seitenaufruf ist ihr Inhalt “minimal custom”, was auch so sein soll.&nbsp;Beim ajax request ist der Inhalt&nbsp;jedoch “minimal”, was ja dem Standartverhalten entspricht.

Der&nbsp; **box\_article.tpl&nbsp;** habe ich auch diese Abfrage hinzugefügt:

```
{elseif $productBoxLayout == 'minimal custom'}
  {include file="frontend/listing/product-box/box-custom.tpl"}

```

Die **listing\_ajax.tpl** befindet sich auch in meiner Themestruktur.

---

<div class="post-metadata">

**Author:** ![Beyer](https://avatars.discourse-cdn.com/v4/letter/b/ba9def/32.png) [@Beyer](https://forum.shopware.com/u/Beyer)\
**Post date:** [31. August 2016 um 12:18 UTC](https://forum.shopware.com/t/individuelles-layout-kategorie/38887/6 "2016-08-31T12:18:17Z")

</div>

Hallo moerv,

habe auch damit gekämpft.

In meinem fall wird auch nicht mein custom custom\_listing.tpl gezogen.

Der „Fehler“ in meinen Augen liegt, dass im ajax context kein $sCategoryContent der View übergeben wird.  
Somit existiert $sCategoryContent.template nicht (wo eig. deine custom template Datei stehen würde) und somit ist&nbsp;  
$productBoxLayout auf ‚basic‘.

Dies ist beim normalen Listing der beim erstaufruf geladen wird nicht so.&nbsp;

Meine Lösung durch ein Plugin (kann man bestimmt besser machen aber es tuts):

box\_article.tpl überschreiben:

> {extends file=„parent:frontend/listing/box\_article.tpl“} {block name=„frontend\_listing\_box\_article\_includes“} {if $myLayout == ‚custom\_layout.tpl‘} {include file=„frontend/listing/product-box/custom\_layout.tpl“} {else} {$smarty.block.parent} {/if} {/block}

Plugin schreiben (In meinem Beispiel nach dem neuen 5.2 Plugin system)

MyPlugin.php

> namespace MyPlugin; use Shopware\Components\Plugin; /\*\* \* Class MyPlugin \* @package MyPlugin \*/ class MyPlugin extends Plugin { const TEMPLATE = ‚custom\_layout.tpl‘; /\*\* \* @return array \*/ public static function getSubscribedEvents() { return [// Register template. ‚Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend\_Listing‘ =\> ‚onListing‘, // Register template for infinite scroll. ‚Enlight\_Controller\_Action\_PostDispatchSecure\_Widgets\_Listing‘ =\> ‚onWidgetListing‘]; } /\*\* \* @param \Enlight\_Event\_EventArgs $args \*/ public function onListing(\Enlight\_Event\_EventArgs $args) { /\*\* @var \Shopware\_Controllers\_Frontend\_Listing $subject \*/ $subject = $args-\>getSubject(); if ($subject-\>View()-\>sCategoryContent[‚template‘] == self::TEMPLATE) { $subject-\>View()-\>myLayout= self::TEMPLATE; // Register view. $this-\>container-\>get(‚Template‘)-\>addTemplateDir($this-\>getPath() . ‚/Views‘); } } /\*\* \* @param \Enlight\_Event\_EventArgs $args \*/ public function onWidgetListing(\Enlight\_Event\_EventArgs $args) { /\*\* @var \Shopware\_Controllers\_Widgets\_Listing $subject \*/ $subject = $args-\>getSubject(); if ($subject-\>Request()-\>getActionName() == ‚ajaxListing‘) { /\* Get the category template because no $subject-\>View()-\>sCategoryContent isset in this context. \*/ $categoryId = $subject-\>Request()-\>getParam(‚sCategory‘); $categoryContent = Shopware()-\>Modules()-\>Categories()-\>sGetCategoryContent($categoryId); if ($categoryContent[‚template‘] == self::TEMPLATE) { $subject-\>View()-\>myLayout= self::TEMPLATE; // Register view. $this-\>container-\>get(‚Template‘)-\>addTemplateDir($this-\>getPath() . ‚/Views‘); } } }
> 
> }

Pluginstruktur:

MyPlugin

- Views  
– listing  
— product-box  
---- my\_layout.tpl  
– box\_article.tpl
- MyPlugin.php&nbsp;
- plugin.xml

Hoffe habe keinen „schnell schnell“ - Fehler und es hilf den ein oder anderen.

Wenn es besser geht bitte schreiben. Bin lernbereit =)

Gruß

---

<div class="post-metadata">

**Author:** ![JungWR](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@JungWR](https://forum.shopware.com/u/JungWR)\
**Post date:** [26. September 2016 um 10:00 UTC](https://forum.shopware.com/t/individuelles-layout-kategorie/38887/7 "2016-09-26T10:00:39Z")

</div>

Hall Beyer,

kannst du eine Zip datei deines Plugins hochladen? Ich verstehe deine Änderung nicht ganz und würde dies ohne plugin realisieren wollen.
