Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как вместо пустой цены выводить "Цена по запросу" на основе 1С-Битрикс Aspro.Max и сделать это не редактируя шаблон?

Как оптимальнее решить подобную задачу? Недавно возникла необходимость вместо пустой цены выводить "Цена по запросу" в каталоге товаров на основе 1С-Битрикс Aspro.Max и сделать это совсем не редактируя шаблон.
Использовал кастомный JavaScript в настройках [Аспро: Максимум] в админ панели CMS Битрикс сайта [ Редактирование включаемой области: /bitrix/templates/aspro_max/js/custom.js ].
Повесил наблюдатель за DOM объектами через встроенный javascript объект MutationObserver( https://learn.javascript.ru/mutation-observer ) для товаров которые подгружаются через AJAX по кнопке 'Показать больше товаров' и инициировав проверку на первоночально загруженные товарные позиции при открытии страницы.
Так же это работает и в детальной карточке товара магазина 1C-Bitrix с шаблоном от "Aspro Максимум".

Код:

var targetInit = document.querySelectorAll('.item_info');
for (var i = 0; i < targetInit.length; i++) {
priceM=targetInit[i].getElementsByClassName('cost prices clearfix')[0];
regex = /^\s+$/g;
if((priceM.innerText=='')||(priceM.innerText.match(regex))){
priceM.innerHTML += "Цена по запросу";
}
}

var target = document.querySelectorAll(".inner_wrapper");
for (var i = 0; i < target.length; i++) {

// create an observer instance
var observer = new MutationObserver(function(mutations) {
//console.log("mutation1");
mutations.forEach(function(mutation) {

for(let node of mutation.addedNodes) {

if (!(node instanceof HTMLElement)) continue;
for(let elem of node.querySelectorAll('.item_info')) {
priceM=node.getElementsByClassName('cost prices clearfix')[0];
regex = /^\s+$/g;
if((priceM.innerText=='')||(priceM.innerText.match(regex))){
priceM.innerHTML += "Цена по запросу";
}
}
}

});
});

var config = { childList: true, subtree: true };

observer.observe(target[i], config);
}

if(document.getElementsByClassName('cost prices detail')[0] != undefined){
if(document.getElementsByClassName('cost prices detail')[0].innerText==''){
document.getElementsByClassName('cost prices detail')[0].innerHTML += "Цена по запросу";
}
}

JavascriptPhp+1
Yriy
  ·   · 3,8 K
Первый
Идея не очень. Что будет если у пользователся не отработает JS? 
самый простой вариант это лезть в модуль и aspro.max подразумевает корректировку свои собственных методов и открыто об этом говорит. В таком случае можно переписать событие через init.php и просто переписать 0 на "Цена по запросу"
не отработает JS? когда такое было у вас на практике? но вообще может и не очень, ничего не идеально
Первый
В настройках Аспро Максимум есть корзина, проделайте как на скринах, выберите нужен ли попап с запросом цены(встроенный функционал) и напишите свой текст, например под заказ Читать далее
Первый
Здравствуйте Юрий интересное решение добавил ваш код, но текст не поменялся код добавлял как написано /bitrix/templates/aspro_max/js/custom.js во вложении фал custom.js https://disk.yandex.ru/d/OMLvQMTmQmf1EQ работает ли... Читать далее
там часть кода и надо адаптировать под свой сайт, проверить там тэги и другие детали, тем более уже больше года... Читать дальше