Shopware Kategorie Sortierung und Anzahl der Artikel

Sortierung der Artikel Kategorien

Shopware erlaubt es die standardmäßige Sortierung der Artikel festzulegen. Unter Grundeinstellungen -> Storefront -> Kategorien / Listing wird im Punkt Standardsortierung Listing die gewünschte Standarsortierung angegeben. Welche Werte erlaubt sind kann diesem Tutorial entnommen werden: Kategorien / Listen.

Durch die Umstellung werden die Artikel tatsächlich umsortiert, die angezeigte Sortierungsart dagegen wird nicht angepasst. Das hat zur Folge, dass z.B. die Artikel nach dem Preis sortiert wurden, oben jedoch das Erscheinungsdatum als Kriterium angezeigt wird.

Shopware-Kategorien-Artikel-Sortierung

Um diesen Wert ebenfalls auf die neue Sortierung zu setzen, bedarf es einen Eingriffs in die /frontend/listing/listing_actions.tpl Datei im aktuell aktiven Templateverzeichnis (optimalerweise ein Custom Template, um die Standard Dateien im Orginalzustand zu lassen). Hier widmen wir uns dem Block frontend_listing_actions_sorts und schreiben diesen wie folgt um:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{block name='frontend_listing_actions_sort'}
            <form method="get" action="{url controller=cat sCategory=$sCategoryContent.id}">
                <input type="hidden" name="sPage" value="1">
 
                <div class="sort-filter">
                    <label>{s name='ListingLabelSort'}{/s}</label>
                    <select name="sSort" class="auto_submit">
                        <option value="1"{if  !isset($sSort) || $sSort eq 1} selected="selected"{/if}>{s name='ListingSortRelease'}{/s}</option>
                        <option value="2"{if $sSort eq 2} selected="selected"{/if}>{s name='ListingSortRating'}{/s}</option>
                        <option value="3"{if $sSort eq 3} selected="selected"{/if}>{s name='ListingSortPriceLowest'}{/s}</option>
                        <option value="4"{if $sSort eq 4} selected="selected"{/if}>{s name='ListingSortPriceHighest'}{/s}</option>
                        <option value="5"{if $sSort eq 5} selected="selected"{/if}>{s name='ListingSortName'}{/s}</option>
                        {block name='frontend_listing_actions_sort_values'}{/block}
                    </select>
                </div>
            </form>
        {/block}

Die relevante Änderung gegenüber dem Orignalzustand ist die Erweiterung des gewünschten option Tags. In meinem Beispiel wird die Smarty if – Abfrage des  Tags option mit dem value=“3″ durch {if !$sSort || $sSort eq 3} ersetzt. Da beim ersten Aufruf der $sSort Parameter nicht bekannt ist, nimmt das Template den  Wert vom ersten option-Tag an (Erscheinungsdatum). Durch diese Anpassung sorgen wir dafür, dass wenn der Parameter nicht gesetzt wurde, das abgeänderte option-Tag vorausgewählt wird.

Leider impliziert die Lösung, dass wenn man im Backend die Sortierung wieder ändert, eine erneute Anpassung erfolgen muss. Solange die Änderung jedoch nicht standardmäßig übergeben wird, erfüllt die Template Anpassung ihren Zweck.

Anzahl der Artikel pro Seite

Wo wir uns schon in der listing_actions.tpl befinden, gibt es noch ne Kleinigkeit die ich gern umstelle.
Auf der Kategorie Listing Seite befindet sich oben rechts die Auswahlliste, mit der man festlegt, wieviele Artikel pro Seite angezeigt werden sollen.

Artikel-Seite-Filter

Aus meiner Sicht macht diese Liste dann Sinn wenn es mehr als eine Auswahl gibt. Dies ist standardmäßig der Fall. Man kann aber im Backend unter Grundeinstellungen -> Storefront -> Kategorien / Listing die Vorauswahl auf nur einen Wert beschränken, z.B. auf 12. Daher entferne ich auch diese gern. Damit die Liste aber auch nur angezeigt wird, wenn wir mehr als einen Wert haben ist ein kleiner Eingriff in den Block frontend_listing_actions_items_per_page notwendig:

1
2
3
{block name='frontend_listing_actions_items_per_page'}
{if $sPerPage|@count gt 1}
...

Die relevante Änderung befindet sich in der dritten Zeile: {if $sPerPage|@count gt 1}. Sie bewirkt dass die Auswahlliste nur dann angezeigt wird, wenn die Anzahl der Listenelemente größer als 1 ist. Ganz simple Geschichte, die jedoch dafür sorgt, dass dem Nutzer nicht eine Auswahlmöglichkeit suggeriert wird, wo es keine gibt. Dies ist meiner Meinung auch konsequent im Hinblick auf die Usability und Konsistenz des Online-Shops, zumal auch die Felder Blättern und Seite ebenfalls ausgeblendet werden, wenn nur eine Seite vorhanden ist.

Wenn ihr Verbesserungsvorschläge und Anregungen habt bzw. eure Meinung dazu loswerden möchtet, würde ich mich über eure Kommentare freuen!

Bis demnächst!