Я следовал руководству Wix, чтобы создать область «Сопутствующие товары» в нижней части страницы их динамического продукта.
В основном это работает так, как вы ожидаете.Проблема возникает, когда вы нажимаете на один из связанных продуктов и видите, что список связанных продуктов не изменяется, чтобы отразить текущий загруженный продукт.
Единственный способ получить список связанных продуктов, который нужно изменить, - обновитьстраницы.
Есть ли простое решение для этого?Ниже приведен их код:
import wixData from 'wix-data';
import wixLocation from 'wix-location';
$w.onReady(function () {
loadRelatedProducts();
});
async function loadRelatedProducts() {
let product = await $w('#productPage1').getProduct();
let relatedProductResults = await Promise.all([
relatedProductsByTable(product),
relatedProductsByPrice(product)
]);
if (relatedProductResults[0].length > 0)
showRelatedProducts(relatedProductResults[0]);
else
showRelatedProducts(relatedProductResults[1]);
}
async function relatedProductsByTable(product) {
let productId = product._id;
// find related products by relation table
let relatedByTable = await Promise.all([
wixData.query('RelatedProducts')
.eq('productA', productId)
.include('productB')
.find(),
wixData.query('RelatedProducts')
.eq('productB', productId)
.include('productA')
.find()
]);
let relatedProducts = [
...relatedByTable[0].items.map(_ => _.productB),
...relatedByTable[1].items.map(_ => _.productA)
];
return relatedProducts;
}
async function relatedProductsByPrice(product) {
let productId = product._id;
// find related products by price
let relatedByPrice = await wixData.query('Stores/Products')
.between('price', product.price * 0.8, product.price * 1.2)
.ne('_id', productId)
.find();
return relatedByPrice.items;
}
function showRelatedProducts(relatedProducts){
if(relatedProducts.length > 0){
relatedProducts.splice(4, relatedProducts.length);
$w('#relatedItemsRepeater').onItemReady(relatedItemReady);
$w("#relatedItemsRepeater").data = relatedProducts;
$w("#relatedItems").expand();
}
else {
$w("#relatedItems").collapse();
}
}
function relatedItemReady($w, product){
$w("#productImage").src = product.mainMedia;
$w("#productName").text = product.name;
$w("#productPrice").text = product.formattedPrice;
$w('#productImage').onClick(() => {
wixLocation.to(product.productPageUrl);
});
}
Я подозреваю, что проблема заключается в том, что все это вызвано событием .onReady()
.К сожалению, я не уверен, как также выполнить этот повторный запуск для другого триггера, например, при щелчке по самому связанному элементу.
Сама страница не перезагружается при нажатии на один из связанных продуктов.Вместо этого я считаю, что они просто переписывают URL-адрес, а затем обновляют, а затем повторно извлекают данные из базы данных.