Код: Выделить всё
// Get pricing data (this object simulates the way you should obtain your pricing data object)
// 1. Get pricing data (this object simulates the way you should obtain your pricing data object)
let pricingData = {
"2023/09/01": {
price: 35,
average: 1 //low
},
"2023/09/02": {
price: 54,
average: 2 //mid
},
"2023/09/03": {
price: 76,
average: 3 //high
},
"2023/09/04": {
price: 19,
average: 1
},
"2023/09/05": {
price: 20,
average: 1
}
// and so on...
};
Когда я жестко запрограммировал даты, как указано выше, сценарий работает отлично. Но мне нужна возможность регулярно обновлять цены, поэтому я создал таблицу в phpAdmin.
Я создал таблицу в phpAdmin и получил к ней доступ для заполнения массива php. Я меняю формат даты на косую черту, как в примере:
Код: Выделить всё
Эта строка
Код: Выделить всё
$priceArray[] = array('day'=>$newdate, 'price'=>$newprice);
Код: Выделить всё
$priceArray[$newdate] = ['price'=>$newprice];
Затем я копирую таблицу php в таблицу javascript через Json:
Код: Выделить всё
let pricingData = JSON.parse('');
console .log(pricingData);
Код: Выделить всё
// 2. Initialize Datedropper by setting up the onRender callback
new dateDropper({
selector: '.economy',
range: false,
expandable: true,
expandedOnly: true,
minDate: minDate,
maxDate: maxDate,
minYear: year,
maxYear: yearmax,
startFromMonday: true,
format: "dd/mm/y",
lang: "en",
showArrowsOnHover: false,
overlay: false,
doubleView: false,
startFromMonday: true,
changeValueTo: '.flightdate',
jump: "1",
autoFill: true,
loopAll: true,
onRender: function(dates) {
Object.keys(dates).forEach(function(day){
let pickerDay = dates[day];
let pricingDay = pricingData[day];
console .log(pricingDay);
let average = 'low';
if(pricingDay.price==0) {
average = 'high';
pricingDay.price="---";
}
if(pricingDay.price=='---') {
average = 'high';
}
// Create the price node
let customLabel = document.createElement('div');
//customLabel.className = `price price--${averageClass(pricingDay.average)}`;
customLabel.className = `price price--${average}`;
if(pricingDay.price=="---") {
customLabel.innerHTML = `${pricingDay.price}`;
}
else {
customLabel.innerHTML = `${pricingDay.price} €`;
}
// Append the price node to the day node
pickerDay.node.appendChild(customLabel);
});
}
});
Код: Выделить всё
Uncaught TypeError: Cannot read properties of undefined (reading 'price')
at Newbookingform3.php:167:18
at Array.forEach ()
at Object.onRender (Newbookingform3.php:159:24)
Код: Выделить всё
let pricingData = {
"2023/09/01": {
price: 35,
average: 1 //low
},
Подробнее здесь: https://stackoverflow.com/questions/791 ... by-felix-g
Мобильная версия