Dodanie obsługi filtrów na stronie głównej
W tym artykule dowiesz się jak zmodyfikować swój szablon, aby dodać w nim obsługę filtrów na stronie głównej.
Poniższy przykład jest jednym z wielu możliwych scenariuszy, Należy modyfikować kod we we własnym zakresie i dostosować go do własnych potrzeb.
Przykład modyfikacji szablonu Szafir
Krok 1. W panelu administracyjnym e-Sklepu przejdź do sekcji Wygląd sklepu/Ustawienia/(prawy górny róg) Edytuj ustawienia zaawansowane/(prawy górny róg) Edytuj HTML.
Krok 2. Przejdź do pliku home.html i na samym początku zastąp linijkę:
poniższym kodem:
{% assign categories = homepage-filters.Content | Split: '||||||’ -%} {% assign categoryIndex = 0 -%}
{% assign categoryIndex = 0 -%} {% for category in categories -%} {% assign categoryIndex = categoryIndex | Plus:1 -%} {% assign categoryArr = category | Split: '|||||’ -%} {% assign categoryInfoArr = categoryArr[0] | Split: '|’ -%} {% assign categoryId = categoryInfoArr[1] -%}
{% endfor -%}
Krok 3. Z listy dostępnych plików przejdź do folderu js, a następnie w dowolnym pliku JS (np. js/init.js) dodaj kod:
function toggleHomepageFilter(e) {
var index = $(e.currentTarget).data('index');
$('.filter-bar-lq').removeClass('active-filter-bar-lq');
$(e.currentTarget).addClass('active-filter-bar-lq');
$('.homepage-filters-container-lq').addClass('hidden-lq');
$('.homepage-filters-container-lq[data-index='+index+']').removeClass('hidden-lq');
};
$('body').on('click', '.filter-bar-lq:not(.active-filter-bar-lq)', function (e) {
toggleHomepageFilter(e);
});
function getHomepageFilterValues(e) {
var currentFilter = $(e.currentTarget);
var currentFilterName = currentFilter.attr('name');
var filtersContainer = $(e.currentTarget).parents('.homepage-filters-container-lq');
var id = filtersContainer.find('.post-homepage-filters-lq').data('id');
var data = [];
var selects = filtersContainer.find('select');
selects.each(function () {
if($(this).val() != '' && $(this).attr('name') != currentFilterName){
var name = $(this).attr('name');
var val = $(this).val();
data.push({name: name, value: val});
}
});
data.push({name: "__action", value: 'Get/SearchFilters'});
var param = $.param(data, true);
$.get(',2,' + id, param, function (result) {
$.get(result.action.Redirect302, {__collection: 'products.FilteringOptions.Filters'}, function (res) {
var filtersSortingOrder = $('.homepage-lq').data('filters-sorting-order').split('|');
var notSortedFilters = res.collection;
var sortedFilters = [];
for(var i=0; i<notSortedFilters.length; i++){
sortedFilters.push({Field: notSortedFilters[i].Field, Values: []});
for(var j=0; j<filtersSortingOrder.length; j++){
var sortingFilterName = filtersSortingOrder[j].trim();
for(var k=0; k<notSortedFilters[i].Values.length; k++){
if(sortingFilterName == notSortedFilters[i].Values[k].Text){
sortedFilters[i].Values.push(notSortedFilters[i].Values[k]);
}
}
}
}
for(var i=0; i<sortedFilters.length; i++){
if(sortedFilters[i].Field == currentFilterName){
var values = sortedFilters[i].Values;
var selectedOptionValue = currentFilter.val();
currentFilter.find('option:not([value=""])').remove();
for(var j=0; j<values.length; j++){ if(values[j].Count > 0){
var option = ''+values[j].Text+'';
currentFilter.append(option);
}
}
var newOptions = currentFilter.find('option');
newOptions.each(function(){
if($(this).val() == selectedOptionValue){
$(this).prop('selected', true);
}
})
}
}
});
});
};
$('body').on('mouseenter', '.get-homepage-filter-values-lq', function (e) {
getHomepageFilterValues(e);
});
function postHomepageFilters(e) {
var id = $(e.currentTarget).data('id');
var data = [];
var selects = $(e.currentTarget).parents('.homepage-filters-container-lq').find('select');
selects.each(function () {
if($(this).val() != ''){
var name = $(this).attr('name');
var val = $(this).val();
data.push({name: name, value: val});
}
});
data.push({name: "__action", value: 'Get/SearchFilters'});
var param = $.param(data, true);
$.get(',2,' + id, param, function (result) {
app.replace(result.action.Redirect302);
});
};
$('body').on('click', '.post-homepage-filters-lq', function (e) {
postHomepageFilters(e);
});
Krok 4. Przejdź do folderu scss, a następnie do podfolderu globals, gdzie w pliku _globals-m.scss dodaj kod:
.filter-bars-container-ui{
display: flex;
}
.filter-bar-ui {
width: 50%;
border: none;
text-align: center;
padding: 10px;
border-bottom: 1px solid $lightBorderColor;
background: $menuBackgroundColor;
display: flex;
align-items: center;
justify-content: center;
}
.active-filter-bar-lq, .filter-bar-ui:hover {
background: $breadcrumbsAndSomeLists;
border-bottom: 1px solid $breadcrumbsAndSomeLists;
color: #fff;
}
Krok 5. Będąc w fodlerze scss, przejdź do podfolderu partials, następnie dodaj poniższy kod w pliku _home.scss:
.homepage-filters-container-ui{
position: absolute;
top: -2px;
left: 0;
z-index: 11;
width: 100%;
padding: 20px 0 5px;
background: rgba(#5B6569, 0.5);
border-top: 2px solid $breadcrumbsAndSomeLists;
text-align: center;
}
.homepage-filters-ui{
text-align: center;
}
.homepage-filter-ui{
width: 28%;
display: inline-block;
padding-left: 20px;
margin-bottom: 20px;
button{
width: 100%;
height: 66px;
margin-right: -15px;
}
label:not(.checkbox-ui):not(.radio-ui){
color: #fff;
margin-left: 6px;
}
}
@media only screen and (max-width: 1279px) {
.homepage-filters-container-ui{
position: static;
width: 100%;
background: $breadcrumbsAndSomeLists;
padding: 5px 0;
a{
display: block;
color: #fff;
padding: 20px;
text-align: center;
}
}
.homepage-filters-ui{
text-align: left;
}
.homepage-filter-ui{
width: calc(50% - 12px);
display: inline-block;
float: none;
margin-bottom: 0;
&:nth-child(1), &:nth-child(6){
width: 100%;
padding: 0 20px;
}
button {
height: 56px;
margin-top: 20px;
}
label:not(.checkbox-ui):not(.radio-ui){
margin-left: 0;
}
}
}
Panel Administracyjny
Krok 1. W Panelu Administracyjnym przejdź do zakładki Wygląd sklepu/Ustawienia/(prawy górny róg) Edytuj ustawienia zaawansowane/Zakładka Obiekty.
Krok 2. Dodaj nowy obiekt klikając przycisk Dodaj. Wybierz typ Tekst i nazwij go homepage-filters. Gdy się pojawi na liście obiektów kliknij na niego, aby edytować jego ustawienia.
Krok 3. W polu treść sprecyzuj, jakiej kategorii towarów ma dotyczyć filtrowanie (możesz utworzyć kilka osobnych zakładek), oraz jakich atrybutów filtrujących będzie można użyć.
Poniżej przykładowa treść:
Nazwa Kategorii1|ID kategorii1 ||||| Nazwa Filtra1|FILTR1 |||| Nazwa Filtra2|FILTR2 |||| Nazwa Filtra3|FILTR3 |||| Nazwa Filtra4|FILTR4 |||| Nazwa Filtra5|FILTR5 |||||| Nazwa Kategorii2|ID kategorii2 ||||| Nazwa Filtra6|FILTR6 |||| Nazwa Filtra7|FILTR7 |||| Nazwa Filtra8|FILTR8 |||| Nazwa Filtra9|FILTR9
- Nazwa Kategorii1,2,3,… – Nazwa Kategorii w e-Sklepie, na podstawie której zostanie utworzony filtr na stronie głównej.
- ID Kategorii1,2,3,… – jest to ID wybranej kategorii w e-Sklepie, na podstawie której zostanie utworzony filtr.
- Nazwa Filtra1,2,3,… – w tym miejscu podaj nazwę filtra, jaki chcesz aby został wyświetlony na stronie głównej.
- FILTR1,2,3,… – wartość Field w obiekcie, w którym znajdują się filtry dla danej kategorii.
Krok 4. Udostępnij obiekt na stronie głównej w szablonie. Gdy utworzysz treść dla obiektu przejdź do zakładki Strony i zaznacz parametr Strona główna.

Krok 5. Do listy obiektów (Wygląd sklepu/Ustawienia/(prawy górny róg)Edytuj ustawienia zaawansowane/Zakładka Obiekty) dodaj nowy obiekt o typie tekst oraz nazwie filters-sorting-order.
Krok 6. Podobnie jak w kroku 3 uzupełnij treść dla nowo dodanego obiektu. W treści należy wprowadzić wszystkie wartości, dla każdego filtra, którego chcemy wyświetlać Klientom w e-Sklepie. Kolejność, w jakiej wprowadzisz wartości będzie taka sama na stronie głównej e-Sklepu.
Poniżej przykładowa treść:
Wartość 1| Wartość 2| Wartość 3|
Krok 7. Udostępnij obiekt na stronie głównej w szablonie. Gdy utworzysz treść dla obiektu przejdź do zakładki Strony i zaznacz parametr Strona główna (patrz pkt. 4).