- 18 Feb 2025
- 10 Minuten te lezen
- Afdrukken
- DonkerLicht
- Pdf
Bilvelger (Filter)
- Bijgewerkt op 18 Feb 2025
- 10 Minuten te lezen
- Afdrukken
- DonkerLicht
- Pdf
I denne artikkelen ser vi på hvordan vi kan sette opp en bilvelger i butikker som er på America-malen.
Opprett kategoristruktur
Butikken må først ha satt opp sin kategoristruktur for å støtte Bilvelgeren.
Kategoristruktur kan bygges på følgende måte:
Bilvelger (Hovedkategori)
Audi (Bilmerke)
Audi A1 (Bilmodell)
2010-2014 (Modell/Årsmodell)
2015-2018
2018 →
Audi A2
Audi A3
BMW (Bilmerke)
BMW 1-Serie (Bilmodell)
1-Serie (E8xx) 2004-2007 (Modell/Årsmodell)
1-Serie (E8x Facelift) 2008-2011
1-Serie (F2x Facelift) 2015-2019
BMW 2-Serie (Bilmodell)
BMW 3-Serie (Bilmodell)
3-Serie (E36) 1992-1997 (Modell/Årsmodell)
3-Serie (E46) 1998-2001
3-Serie (E46 Facelift) 2002-2004
Ford (Bilmerke)
Legg til kode i kontrollpanelet
Legg til Javascript og CSS i nettbutikken.
Velg “Copy” for å få korrekt, lesbar format.
function swapKeysAndValues(obj) {
const swapped = Object.entries(obj).map(([key, value]) => [value, key]);
return Object.fromEntries(swapped);
}
function orderByKey(categories) {
var ordered = Object.keys(categories)
.sort()
.reduce(function (obj, key) {
obj[key] = categories[key];
return obj;
}, {});
return ordered;
}
function mystoreSort(categories) {
var modified = swapKeysAndValues(categories);
modified = orderByKey(modified);
return modified;
}
// Custom code for car picker in header
$(document).ready(function () {
var html = `
<div class="custom-filter-wrapper">
<div class="custom-filter-title">Velg din bil her</div>
<div class="custom-filter">
<div>
<select id="main-category">
<option value="0">Velg bilmerke </option>
</select>
</div>
<div>
<select id="subcategory" disabled>
<option value="0">Velg bilmodell</option>
</select>
</div>
<div>
<select id="subsubcategory" disabled>
<option value="0">Velg modell/årsmodell</option>
</select>
</div>
</div>
</div>`;
$(".frontpage-banner").append(html);
// List all main categories
const CAT_ID_FOR_CUSTOM_CAR_PICKER = "14296"
$.get("/ajax.php?ajaxfunc=get_subcategories&cID="+CAT_ID_FOR_CUSTOM_CAR_PICKER+"", function (data) {
var categories = JSON.parse(data);
var tempCategories = mystoreSort(categories);
for (category in tempCategories) {
$("#main-category").append(
'<option value="' +
tempCategories[category] +
'">' +
category +
"</option>"
);
}
$('#main-category').niceSelect('update');
});
// On change list subcategories
$("#main-category").unbind("change");
$("#main-category").on("change", function (e) {
console.log($(this));
var _that = $(this);
var subcatId = $(this).val();
var textUpdate = $(this).find("option:selected").text();
if (subcatId == 0) {
$("#subcategory").find("option").remove();
$("#subcategory").attr("disabled", "disabled");
$("#subcategory").append('<option value="0">Velg bilmodell</option>');
$("#subcategory").niceSelect('update');
$("#subsubcategory").find("option").remove();
$("#subsubcategory").attr("disabled", "disabled");
$("#subsubcategory").append(
'<option value="0">Velg modell/årsmodell</option>'
);
$("#subsubcategory").niceSelect('update');
return false;
}
$.get(
"/ajax.php?ajaxfunc=get_subcategories&cID=" + subcatId,
function (data) {
$("#subcategory").find("option").remove();
var subcategories = JSON.parse(data);
var tempSubCategories = mystoreSort(subcategories);
$("#subcategory").removeAttr("disabled");
if (subcategories == null) {
$.get(
"/ajax.php?ajaxfunc=create_category_link&cID=" + subcatId,
function (data) {
location.href = data;
}
);
}
$("#subcategory").append(
'<option value="0">Velg din ' + textUpdate + "</option>"
);
for (category in tempSubCategories) {
$("#subcategory").append(
'<option value="' +
tempSubCategories[category] +
'">' +
category +
"</option>"
);
}
$('#subcategory').niceSelect('update');
$("#subsubcategory").find("option").remove();
$("#subsubcategory").attr("disabled", "disabled");
$("#subsubcategory").append('<option value="0">Velg modell/årsmodell</option>');
$('#subsubcategory').niceSelect('update');
}
);
});
$("#subcategory").unbind("change");
$("#subcategory").on("change", function (e) {
console.log($(this));
var _that = $(this);
var subcatId = $(this).val();
if (subcatId == 0) {
$("#subsubcategory").find("option").remove();
$("#subsubcategory").attr("disabled", "disabled");
$("#subsubcategory").append('<option value="0">Velg modell/årsmodell</option>');
$('#subsubcategory').niceSelect('update');
return false;
}
$.get(
"/ajax.php?ajaxfunc=get_subcategories&cID=" + subcatId,
function (data) {
$("#subsubcategory").find("option").remove();
var subcategories = JSON.parse(data);
var tempSubCategories = mystoreSort(subcategories);
$("#subsubcategory").removeAttr("disabled");
if (subcategories == null) {
$.get(
"/ajax.php?ajaxfunc=create_category_link&cID=" + subcatId,
function (data) {
location.href = data;
}
);
}
$("#subsubcategory").append(
'<option value="0">Velg modell/årsmodell</option>'
);
for (category in tempSubCategories) {
$("#subsubcategory").append(
'<option value="' +
tempSubCategories[category] +
'">' +
category +
"</option>"
);
}
$('#subsubcategory').niceSelect('update');
}
);
});
// On subcategory change, redirect
$("#subsubcategory").on("change", function (i) {
var _that = $(this);
var subsubcatId = _that.val();
$.get(
"/ajax.php?ajaxfunc=create_category_link&cID=" + subsubcatId,
function (data) {
location.href = data;
}
);
});
$('#main-category').niceSelect();
$('#subcategory').niceSelect();
$('#subsubcategory').niceSelect();
});
.custom-filter-wrapper {
margin-top: 20px;
background: black;
}
.custom-filter {
display: flex;
padding: 15px 20px 10px;
justify-content: space-around;
border-radius: 4px;
padding: 25px;
}
.custom-filter-title {
color: #FFF;
padding-top: 10px;
font-size: 25px;
text-align: center;
}
.custom-filter .nice-select {
width: 300px;
}
@media only screen and (max-width: 600px){
.custom-filter {
flex-direction: column;
align-items: center;
gap: 15px;
}
}
/* nice select stuff for car picker */
.nice-select {
-webkit-tap-highlight-color: transparent;
background-color: #fff;
border-radius: 5px;
border: solid 1px #e0e7ee;
box-sizing: border-box;
clear: both;
cursor: pointer;
display: block;
float: left;
font-family: inherit;
font-size: 14px;
font-weight: normal;
height: 42px;
line-height: 40px;
outline: none;
padding-left: 18px;
padding-right: 30px;
position: relative;
text-align: left !important;
-webkit-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: 100%;
}
.nice-select:hover {
border-color: #d0dae5; }
.nice-select:active, .nice-select.open, .nice-select:focus {
border-color: #88bfff; }
.nice-select:after {
border-bottom: 2px solid #90a1b5;
border-right: 2px solid #90a1b5;
content: '';
display: block;
height: 5px;
margin-top: -4px;
pointer-events: none;
position: absolute;
right: 12px;
top: 50%;
-webkit-transform-origin: 66% 66%;
-ms-transform-origin: 66% 66%;
transform-origin: 66% 66%;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-transition: all 0.15s ease-in-out;
transition: all 0.15s ease-in-out;
width: 5px; }
.nice-select.open:after {
-webkit-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
transform: rotate(-135deg); }
.nice-select.open .list {
opacity: 1;
pointer-events: auto;
-webkit-transform: scale(1) translateY(0);
-ms-transform: scale(1) translateY(0);
transform: scale(1) translateY(0);
width: 100%;
}
.nice-select.disabled {
border-color: #e7ecf2;
color: #90a1b5;
pointer-events: none; }
.nice-select.disabled:after {
border-color: #cdd5de; }
.nice-select.wide {
width: 100%; }
.nice-select.wide .list {
left: 0 !important;
right: 0 !important; }
.nice-select.right {
float: right; }
.nice-select.right .list {
left: auto;
right: 0; }
.nice-select.small {
font-size: 12px;
height: 36px;
line-height: 34px; }
.nice-select.small:after {
height: 4px;
width: 4px; }
.nice-select.small .option {
line-height: 34px;
min-height: 34px;
width: 100%;
}
.nice-select .list {
background-color: #fff;
border-radius: 5px;
box-shadow: 0 0 0 1px rgba(68, 88, 112, 0.11);
box-sizing: border-box;
margin-top: 4px;
opacity: 0;
overflow: hidden;
padding: 0;
pointer-events: none;
position: absolute;
top: 100%;
left: 0;
-webkit-transform-origin: 50% 0;
-ms-transform-origin: 50% 0;
transform-origin: 50% 0;
-webkit-transform: scale(0.75) translateY(-21px);
-ms-transform: scale(0.75) translateY(-21px);
transform: scale(0.75) translateY(-21px);
-webkit-transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out;
transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out;
z-index: 9; }
.nice-select .list:hover .option:not(:hover) {
background-color: transparent !important; }
.nice-select .option {
cursor: pointer;
font-weight: 400;
line-height: 40px;
list-style: none;
min-height: 40px;
outline: none;
padding-left: 18px;
padding-right: 29px;
text-align: left;
-webkit-transition: all 0.2s;
transition: all 0.2s; }
.nice-select .option:hover, .nice-select .option.focus, .nice-select .option.selected.focus {
background-color: #f6f7f9; }
.nice-select .option.selected {
font-weight: bold; }
.nice-select .option.disabled {
background-color: transparent;
color: #90a1b5;
cursor: default; }
Velg korrekt hovedkategori i JavaScript
For at koden skal vite hvilken kategori som er hovedkategorien for Bilvelgeren, så må det settes en kategori ID direkte i JavaScript-koden.
Finn følgende kode
// List all main categories const CAT_ID_FOR_CUSTOM_CAR_PICKER = "14296"
Vi endrer så "14296" til ID på hovedkategorien i netbtutikken.
Hvordan finner jeg kategori ID?
For å finne kategori ID i kontrollpanelet kan du inspisere hovedkategorien.
I dette eksemplet henter vi ut kategori ID 14296 og legger det til i JavaScript.