Лучший Ответ mr.varhola , 22 February 2024 - 17:11
У меня недавно появилась подобная задача, решил её в шаблоне тизера, ну и в нужных шаблонах модуля item по аналогии:
<?// Проверяем доступное количество товара, скрываем варианты которых нет в наличии или удаляем карточку товара целиком если нет в доступности ни одного варианта
$CB_price = 'b446414f-849a-4684-8015-252eda980a98'; // Прописываем ID своего элемента
$CB_SKU = $this->_item->getElement($CB_price)->data()->variations;
$noUseVariant = array_shift($CB_SKU); // Удаляем первый элемент массива, я так сделал у себя так как у товаров есть вариации и стоимость с остатками заполняются только у них.
$cvvInStock = 0;
foreach($CB_SKU as $currVariant){
if($currVariant['_balance']['value'] == '0'){
$cvv = $currVariant['ab454a37-1fb1-4774-b017-2211be448553']['value'];?>
<script>
jQuery(".teaserId-<?=$item->id;?> input[value='<?=$cvv;?>']").next().addClass('dspn'); // Скрываем вариации товара которых нет в наличии
</script>
<?} else if($currVariant['_balance']['value'] != '0'){
if($cvvInStock == 0){
$cvv = $currVariant['ab454a37-1fb1-4774-b017-2211be448553']['value']; ?>
<script>
setTimeout(function (){
jQuery(".teaserId-<?=$item->id;?> input[value='<?=$cvv;?>']").next().click(); // Кликаем на вариацию которая есть в наличии
},3000);
</script>
<?}
$cvvInStock = 1;
}
}
if($cvvInStock == 0){?>
<script>
jQuery(".teaserId-<?=$item->id;?>").remove(); // Удаляем карточку тизера в случае если нет в наличии ни одной вариации товара
</script>
<?}?>
Таким образом убрал вывод вариаций товара которых нет в наличии, и если у товара нет ни одной вариации - скрыл тизер целиком. Проблему с пагинацией решил автоподгрузкой товаров при пролистывании до конца списка.
В моем случае это решение подошло так как по каждой вариации товаров остатки подгружаются автоматически два раза в сутки и вручную клиент этого не сделает никак.
Карточка товара, при этом, остается на месте ![]()
.teaserId-<?=$item->id;?> - это класс родительского блока карточки товара
Перейти к сообщению














