StopTech BMW 14-15 328i/ 13 Active Hybrid 3 Front BBK w/Black ST60 Calipers Slotted 355X32mm Rotors
StopTech BMW 14-15 328i/ 13 Active Hybrid 3 Front BBK w/Black ST60 Calipers Slotted 355X32mm Rotors
$3,869.37
$4,299.30
-
10%
${function() {
const variantData = data.variant || {"id":"416fd7f3-7b16-4986-96c0-06fd1f3e65ca","product_id":"2597f524-ba70-4128-aa52-12102bdcb404","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"STO83.B33.6700.51","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":3869.37,"min_quantity":1}],"weight":"0","compare_at_price":"4299.3","price":"3869.37","retail_price":"4299.3","available":true,"url":"\/products\/stoptech-bmw-14-15-328i-13-active-hybrid-3-front-bbk-w-black-st60-calipers-slotted-355x32mm-rotors?variant=416fd7f3-7b16-4986-96c0-06fd1f3e65ca","available_quantity":999999999,"options":[],"off_ratio":"10","flashsale_info":{"variant_id":"416fd7f3-7b16-4986-96c0-06fd1f3e65ca","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"3869.37","compare_at_price":"","discount_price":"3869.37","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"10","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":0};
const saveType = null;
const productSaveLabel = null;
return `
-
${ variantData.off_ratio }%
`; }()}
${function(){
return `
${data.starNum}/${data.starTotal}
`;
}()}
${function(){
return `
${data.showStarText === 'true' ? `
${data.starNum}/${data.starTotal}
` : ''}
`;
}()}
const TAG = 'spz-custom-revue-star';
class SPZCustomRevueStar extends SPZ.BaseElement {
constructor(element) {
super(element);
}
static deferredMount() {
return false;
}
buildCallback = () => {
this.action_ = SPZServices.actionServiceForDoc(this.element);
this.templates_ = SPZServices.templatesForDoc(this.element);
this.xhr_ = SPZServices.xhrFor(this.win);
this.starNum = this.element.getAttribute('starNum');
this.starTotal = this.element.getAttribute('starTotal');
this.showStarText = this.element.getAttribute('showStarText');
this.starColor = this.element.getAttribute('color');
this.interact = this.element.getAttribute('interact');
this.starSize = this.element.getAttribute('starSize') || 14;
}
mountCallback = () => {
this.doRender_({
starTotal: this.starTotal,
totalArray: Array.from({ length: Number(this.starTotal) }, (v, k) => k + 1),
starNum: this.starNum,
showStarText: this.showStarText,
starColor: this.starColor,
starSize: this.starSize
}).then(() => {
if (this.interact) {
this.addEventListeners_();
}
});
}
addEventListeners_ = () => {
const stars = document.querySelectorAll('.revue-star__star');
stars.forEach(star => {
star.addEventListener('click', event => {
const starEl = star.closest('.revue-star__star');
const starIndex = Number(starEl.dataset.index);
let isHalf = event.offsetX < star.offsetWidth / 2;
// rtl
if (document.documentElement.getAttribute('dir') === 'rtl') {
isHalf = event.offsetX > star.offsetWidth / 2;
}
const starValue = isHalf ? starIndex - 0.5 : starIndex;
this.starClickHandler_({ value: starValue });
});
});
}
renderStar = () => {
const isRtl = document.documentElement.getAttribute('dir') === 'rtl';
const stars = this.element.querySelectorAll('.revue-star__star');
stars.forEach((star, i) => {
const starIndex = i + 1;
const starEl = star.querySelector('svg:nth-child(2)');
const isHalf = this.starNum % 1 > 0 && Math.ceil(this.starNum) === starIndex;
const isSolid = starIndex <= Math.ceil(this.starNum);
starEl.style.display = isSolid ? 'block' : 'none';
if (isHalf) {
if (isRtl) {
// RTL布局下,如果是半星,显示星星的右半边
starEl.style.clipPath = `polygon(50% 0, 100% 0, 100% 100%, 50% 100%)`;
} else {
// LTR布局下,如果是半星,显示星星的左半边
starEl.style.clipPath = `polygon(0 0, 50% 0, 50% 100%, 0 100%)`;
}
} else {
starEl.style.clipPath = `polygon(0 0, 100% 0, 100% 100%, 0 100%)`
}
});
const showCountEle = this.element.querySelector('#revue-star-show-count');
showCountEle && SPZ.whenApiDefined(showCountEle).then((api) => {
api.render({ starNum: this.starNum, starTotal: this.starTotal });
});
}
doRender_ = (data) => {
return this.templates_
.findAndRenderTemplate(this.element, { starSize: this.starSize, ...data }, null)
.then((el) => {
const children = this.element.querySelector('*:not(template)');
children && SPZCore.Dom.removeElement(children);
this.element.appendChild(el);
})
.then(() => {
this.starNum = data.starNum;
this.renderStar();
});
}
starClickHandler_ = (event) => {
this.starNum = event.value;
this.renderStar();
this.triggerEvent_('change', { value: event.value });
}
triggerEvent_(name, data) {
const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {});
this.action_.trigger(this.element, name, event);
}
isLayoutSupported(layout) {
return layout == SPZCore.Layout.CONTAINER;
}
}
SPZ.defineElement(TAG, SPZCustomRevueStar)
()
try {
const productId = window.SHOPLAZZA.meta.page.resource_id;
const productType = `default`;
const getProductReviews = (star_least) =>
fetch('/api/comment/count-star-multi',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
product_id: [productId],
star_least: star_least || 1,
}),
}).then(res => res.json());
try {
const section = document.querySelector('#revue-product-star');
if(productType === "gift_card" && section) {
section.style.display = 'none';
}
} catch(e) {
console.log(e);
window.addEventListener('load', () => {
try {
const section = document.querySelector('#revue-product-star');
if(productType=== "gift_card" && section) {
section.style.display = 'none';
}
} catch(e) {
console.log(e)
}
})
}
const getReviewsConfig = async () => {
let data = {};
const url = new URL(window.location.href);
const preview_theme_id = url.searchParams.get('preview_theme_id');
const commentConfig = await fetch('/api/comment-config', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json());
data = commentConfig.data;
const themeConfig = await fetch(`/api/comment-config?theme_id=${preview_theme_id || ''}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json());
if (themeConfig?.data && themeConfig.data.star_color) {
data.star_color = themeConfig.data.star_color;
}
if (preview_theme_id) {
data.star_least = window.apps_global && apps_global.reviews && apps_global.reviews.preview_star_least;
} else if (themeConfig?.data && themeConfig.data.product_settings) {
data.star_least = themeConfig.data.product_settings.star_least;
}
return data;
};
if (productId && window.SHOPLAZZA.meta.page.template_type == 1) {
getReviewsConfig().then(async res => {
const config = res;
let review = await getProductReviews(config.star_least);
review = review.data[productId];
if (!config.open_status || (!review.comment_avg_star && !config.show_no_comment_star)) return;
const render = async () => {
const section = document.querySelector('#revue-product-star');
const starComponent = document.querySelector('#revue-product-star-component');
const count = document.querySelector('#revue-product-star-count');
count.innerText = review.published_count;
const api = await SPZ.whenApiDefined(starComponent);
api.doRender_({
starNum: review.comment_avg_star,
starTotal: 5,
showStarText: false,
starColor: config.star_color,
totalArray: Array.from({ length: 5 }, (v, k) => k + 1)
});
section.style.opacity = 1;
}
render();
document.addEventListener('dj.editor.update', render);
});
}
} catch (e) {console.warn(e)};
${function() {
const minInventory = parseInt('7');
const maxInventory = parseInt('10');
const randomInventory = Math.round(Math.random() * (maxInventory - minInventory)) + minInventory;
const customText = "Only {stock} item(s) left in stock!".replace(/\{stock\}/g, '' + randomInventory + '');
const barWidth = (randomInventory / maxInventory) * 100 + '%';
return `
`;
}()}
Product was out of stock.
Enjoy free shipping on every order, delivered to your doorstep no matter where you are in the world.
Shop with confidence with our hassle-free returns policy, ensuring you love what you buy.
Designed with the planet in mind, all our products are committed to sustainable practices.
Your payment information is always protected with our advanced, encrypted checkout security.
2012 - 2015 BMW 335i, 2013 - 2013 BMW 335i xDrive, 2013 - 2015 BMW 328i xDrive, 2013 - 2015 BMW ActiveHybrid 3, 2013 - 2016 BMW 328i, 2014 - 2015 BMW 328d, 2014 - 2015 BMW 328d xDrive, 2014 - 2015 BMW 328i GT xDrive, 2014 - 2015 BMW M235i, 2014 - 2016 BMW 228i, 2014 - 2016 BMW 428i, 2014 - 2016 BMW 428i xDrive, 2014 - 2016 BMW 435i, 2014 - 2016 BMW 435i xDrive, 2015 - 2016 BMW 435i Gran Coupe, 2015 - 2016 BMW 435i xDrive Gran Coupe
This Part Fits:
| Year |
Make |
Model |
Submodel |
| 2014-2016 |
BMW |
228i |
Base |
| 2017 |
BMW |
230i |
Base |
| 2017 |
BMW |
230i xDrive |
Base |
| 2014-2015 |
BMW |
328d |
Base |
| 2014-2015 |
BMW |
328d xDrive |
Base |
| 2013-2016 |
BMW |
328i |
Base |
| 2014-2015 |
BMW |
328i GT xDrive |
Base |
| 2013-2015 |
BMW |
328i xDrive |
Base |
| 2012-2015 |
BMW |
335i |
Base |
| 2013 |
BMW |
335i xDrive |
Base |
| 2014-2016 |
BMW |
428i |
Base |
| 2015 |
BMW |
428i Gran Coupe |
Base |
| 2014-2016 |
BMW |
428i xDrive |
Base |
| 2015 |
BMW |
428i xDrive Gran Coupe |
Base |
| 2014-2016 |
BMW |
435i |
Base |
| 2015-2016 |
BMW |
435i Gran Coupe |
Base |
| 2014-2016 |
BMW |
435i xDrive |
Base |
| 2015-2016 |
BMW |
435i xDrive Gran Coupe |
Base |
| 2017 |
BMW |
440i |
Base |
| 2017-2020 |
BMW |
440i Gran Coupe |
Base |
| 2017-2020 |
BMW |
440i xDrive |
Base |
| 2017-2020 |
BMW |
440i xDrive Gran Coupe |
Base |
| 2013-2015 |
BMW |
ActiveHybrid 3 |
Base |
| 2014-2015 |
BMW |
ActiveHybrid 5 |
Base |
| 2014-2015 |
BMW |
ActiveHybrid 7 |
Base |
| 2014-2015 |
BMW |
M235i |
Base |
| 2015 |
BMW |
M235i xDrive |
Base |
| 2017-2020 |
BMW |
M240i |
Base |
| 2017-2020 |
BMW |
M240i xDrive |
Base |
Vendor by :
Brake Kit(汽摩)
Sku :
STO83.B33.6700.51
Inventory :
999999999
${function(){
const variantData = data.variant || {"id":"416fd7f3-7b16-4986-96c0-06fd1f3e65ca","product_id":"2597f524-ba70-4128-aa52-12102bdcb404","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"STO83.B33.6700.51","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":3869.37,"min_quantity":1}],"weight":"0","compare_at_price":"4299.3","price":"3869.37","retail_price":"4299.3","available":true,"url":"\/products\/stoptech-bmw-14-15-328i-13-active-hybrid-3-front-bbk-w-black-st60-calipers-slotted-355x32mm-rotors?variant=416fd7f3-7b16-4986-96c0-06fd1f3e65ca","available_quantity":999999999,"options":[],"off_ratio":"10","flashsale_info":{"variant_id":"416fd7f3-7b16-4986-96c0-06fd1f3e65ca","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"3869.37","compare_at_price":"","discount_price":"3869.37","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"10","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":0};
return `
Vendor by :
${data.product && data.product.vendor}
Weight :
${variantData && variantData.weight}${variantData && variantData.weight_unit}
Barcode :
${variantData && variantData.barcode}
Sku :
${variantData && variantData.sku}
Inventory :
${variantData && variantData.available_quantity}
` }()}