Best Answer 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;?> - это класс родительского блока карточки товара
Go to the full post