Eine Blätterfunktion kann mit Hilfe einer for-Schleife und dem <liquid>page_list</liquid> Filter erstellt werden.
Über den Parameter pages kann die Anzahl der Items in der Blätternavigation angegeben werden.
<liquid-input>
{% assign page_list = product_list | page_list: pages:6 %}
{% for page_number in page_list %}
<a href="{{ page | pagination_url:page_number }}">{{ page_number }}</a>
{% endfor %}
</liquid-input>
<liquid-output>
1 2 3 4 5 6
</liquid-output>
Mit Hilfe des <liquid>pagination_url</liquid> Filters wird der übergebenen Seite der Parameter "page" angehängt.
Mögliche Werte für pagination_url sind:
<liquid-input>
{% comment %}
Für:
{
page : {
id : 100,
url: '/foo/'
},
product_list:{
next_page: 5
}
}
{% endcomment %}
{{ page | pagination_url:'next' }}
</liquid-input>
<liquid-output>
/foo/?page=5
</liquid-output>
<liquid-input>
{% comment %}
Für:
{
page : {
id : 100,
url: '/foo/'
},
product_list:{
previous_page: 1
}
}
{% endcomment %}
{{ page | pagination_url:'previous' }}
</liquid-input>
<liquid-output>
/foo/?page=1
</liquid-output>
<liquid-input>
{% comment %}
Für:
{
page : {
id : 100,
url: '/foo/'
},
product_list:{}
}
{% endcomment %}
{{ page | pagination_url:5 }}
</liquid-input>
<liquid-output>
/foo/?page=5
</liquid-output>
Der <liquid>sort_url</liquid> Filter nimmt eine Liste entgegen (product_list, content_list) und fügt zur aktuellen URL den "sort" Parameter hinzu mitsamt der anderen Paramter (page_size, aktive Filter). Dem Filter können als Parameter die Sortierungsfelder übergeben werden.
<liquid-input>
{% comment %}
Für:
{
page:{
id : 100,
url : '/foo/'
},
product_list:{
items_per_page: 20,
default_items_per_page: 10,
sort_field : 'price',
sort_direction : 'asc',
filters:[{
id : 1,
is_active: true,
values : [{
filter_id : 1,
filter_type : 'term',
is_active : true,
value : 'val'
}]
}]
}
}
{% endcomment %}
{{ product_list | sort_url:'name','desc' }}
</liquid-input>
<liquid-output>
/foo/?f.1.filter.term=val&page_size=20&sort=name-desc
</liquid-output>
Der <liquid>sort_reset_url</liquid> Filter nimmt eine Liste entgegen (product_list, content_list) und entfernt aus der aktuellen URL den "sort" Parameter.
<liquid-input>
{% comment %}
Für:
{
page:{
id : 100,
url : '/foo/'
},
product_list:{
items_per_page: 20,
default_items_per_page: 10,
sort_field : 'price',
sort_direction : 'asc',
filters:[{
id : 1,
is_active: true,
values : [{
filter_id : 1,
filter_type : 'term',
is_active : true,
value : 'val'
}]
}]
}
}
{% endcomment %}
{{ product_list | sort_reset_url }}
</liquid-input>
<liquid-output>
/foo/?f.1.filter.term=val&page_size=20
</liquid-output>
Der <liquid>filter_value_url</liquid> Filter gibt die URL für die Auswahl bzw. Abwahl eines Filter-Value zurück. Als Eingangwert dient ein Element aus <obj>filter.values</obj>. Die zurückgegebene URL beinhaltet auch ggf. bereits aktiven Filter-Values anderer Filter, die ausgewählte Sortierung, sowie die ausgewählte Anzahl Produkte/Contents je Seite. Nicht berücksichtigt wird jedoch die aktuelle Seitennnummer.
Falls <obj>filter.values[n].is_active</obj> den Wert <liquid>true</liquid> besitzt, wird der Filter-Value abgewählt. Ansonsten wird der Filter-Value ausgwählt.
Falls <obj>filter.is_multi_select</obj> den Wert <liquid>true</liquid> besitzt, können mehere Filter-Values aktiv sein. Ansonsten wird bei der Auswahl eines weiteren Filter-Values der ggf. bereits aktive Filter-Value abgewählt.
<liquid-input>
{% for filterValue in filter.values %}
{{ filterValue | filter_value_url }}
{% endfor %}
</liquid-input>
<liquid-output>
/search/?f.1.filter.term=red
/search/?f.1.filter.term=yelloq
/search/?f.1.filter.term=blue
</liquid-output>
Mit Hilfe des <liquid>filter_form_url</liquid> können mehrere Filter-Values eines <obj>filter</obj> Objektes auf einmal geändert werden. Die zurückgegebene URL muss dazu im <keyword>action</keyword> Attribut eines Formulares eingefügt werden. Als Eingangwert dient das <obj>filter</obj> Objekt. Die zurückgegebene URL beinhaltet auch ggf. bereits aktiven Filter-Values anderer Filter, die ausgewählte Sortierung, sowie die ausgewählte Anzahl Produkte/Contents je Seite. Nicht berücksichtigt wird jedoch die aktuelle Seitennnummer.
Dieser Befehl stellt eine Alternative zu <cmd>filter_value_url</cmd> dar und sollte immer dann eingesetzt werden, wenn mehrere Filter-Values eines Filters über nur einen Request abgesetzt werden sollen.
<liquid-input>
<form action="{{ filter | filter_form_url }}" method="POST">
{% for value in filter.values %}
<input
type="checkbox"
autocomplete="off"
name="{{ filter.param_name }}"
value="{{ value.param_value }}"
{% if value.is_active %}checked{% endif %} />
/>
{{ value.name }}
{% endfor %}
<input type="submit" value="Los" />
</form>
</liquid-input>
<liquid-output>
<form action="/stapelbehaelter/?sort=price-desc" method="POST">
<input type="checkbox" autocomplete="off" name="f.2.filter.term" value="101" checked /> Red
<input type="checkbox" autocomplete="off" name="f.2.filter.term" value="102" checked /> Green
<input type="checkbox" autocomplete="off" name="f.2.filter.term" value="103" /> Blue
<input type="submit" value="Go" />
</form>
</liquid-output>
Der <liquid>filter_reset_url</liquid> Filter gibt eine URL zurück, um alle Filter-Values eines Filters abzuwählen. Als Eingangswert dient das <obj>filter</obj> Objekt.
<code-block>
{{ filter | filter_reset_url }}
</code-block>
Der <liquid>filter_slider_url</liquid> Filter nimmt ein "slider_filter"-Objekt entgegen und gibt die aktuellen URL zurück mitsamt allen Parameter und dem aktuellen Filterkey.
<liquid-input>
{% comment %}
Für:
{
page:{
id : 100,
url : '/foo/'
},
product_list:{
items_per_page: 20,
default_items_per_page: 10,
sort_field : 'price',
sort_direction : 'asc',
filters:[{
id : 1,
is_active: true,
values : [{
filter_id : 1,
filter_type : 'term',
is_active : true,
value : 'val'
}]
}]
},
slider_filter:{
id : 2,
type : 'range',
version : "2"
}
}
{% endcomment %}
{{ slider_filter | filter_slider_url }}
</liquid-input>
<liquid-output>
/foo/?f.1.filter.term=val&page_size=20&sort=price-asc&f.2.filter.range=
</liquid-output>