Estoque do Catálogo de Produtos - Layout, Uso e Consultas
Como adicionar informações de estoque no layoute realizar consultas assíncronas
O estoque é uma funcionalidade da extensão #5 - Catálogo de produtos
Exemplos
👇 Exemplo prático em variações (baunilha indisponível)
https://componentes.interago.com.br/catalogo/item/cupcakes-de-morango-chocolate-e-baunilha
👇 Exemplo prático em um produto simples
https://componentes.interago.com.br/catalogo/item/boneco-de-olinda-do-mussum
Layout
As informações estão disponíveis para serem atualizadas de forma estática na página. Não está disponível para AJAX ou listas.
$productData['productType']
Essa variável separa produtos simples de produtos com variações.
0 para simples
1 para variações
Para consultar o estoque de variações, somente são aceitas requisições por AJAX. O uso estático de consulta só funciona para produtos simples.
Ao utilizar a consulta estática, é necessário sempre atualizar a página de produtos. É adequado para poucos produtos.
$productData['productStock']
Valores:
0 => para produtos à venda
1 => para produtos que aceitam somente encomeda. Para encomendas é possível utilizar dias para fabricação e data de chegada do produto.
Exemplo de uso para imprimir informações de encomenda
//only pre-order (somente encomendas) if($productData['productStock'] == 1) {
$item .= '<p>Somente encomenda';
//check for launch date (data para iniciar o preorder) if($productData['productPreOrderFixedDate'] != 0) { $item .= ' a partir de '.formatDate($productData['productPreOrderFixedDate']); }
//check estimated time to start shipping (tempo para fabricar) if($productData['productStockPreOrderDays'] != 0) { $producData['productStockPreOrderDays'] == 1 ? $labelForDay = 'dia' : $labelForDay = 'dias'; $item .= '. Tempo de fabricação:'.$productData['productStockPreOrderDays'].' '.$labelForDay; }
$item .= '</p>';
}
Exemplo para mostrar a quantidade e limitar o carrinho à quantidade máxima
$item .='<a class="cartAddProduct cartPopupView" cartitemid="'.$productData['productSKU'].'" cartitemname="'.$productData['productTitle'].'" cartitemimage="'.str_replace('w_0_', 'w_64_', $productImg).'" cartitemlink="'.$mainData['seoBaseHref'].$productData['productUrl'].'" cartitemprice="'.$productData['productPrice'].'" cartaddlimit="'.$productData['productStockQtd'].'" originalProductPrice="'.$productData['productPrice'].'">Adicionar na sacola</a>'; $item .= '<p id="stockQtdLabel">Quantidade em estoque: '.$productData['productStockQtd'].'</p>';
Chamadas por ajax para produtos simples e variações
<script type="text/javascript" src="https://www.craft.interago.com.br/App/Extensions/5/tag/stock.js" loading="lazy"></script>
//ajax check stock for simple productif($productData['productStock'] == 0 && $productData['productType'] == 0) {$item .= '<script>
simpleProductCheckStock("'.$mainData['siteDomainToken'].'", '.$mainData['siteId'].', '.$productData['productId'].');
function stockCallback(data) { console.log(data); let obj = JSON.parse(data); if(obj.qtd == 0) { document.querySelector("#stockQtdLabel").innerHTML = "Produto indisponível"; document.querySelectorAll(".cartAddProduct").forEach( e => e.remove()); } }
</script>';}else { //variations if($productData['productType'] == 1) { $item .= ' <script>
document.querySelectorAll(".optionComponent").forEach( e=> { e.addEventListener("click", f => { let lastChild = f.target.getAttribute("lastchild"); console.log(lastChild); if(lastChild == 0) { let opt = f.target.getAttribute("value"); variationProductCheckStock("'.$mainData['siteDomainToken'].'", '.$mainData['siteId'].', opt); } }); });
function outOfStock() { document.querySelector("#stockQtdLabel").innerHTML = "Opção indisponível"; document.querySelectorAll(".cartAddProduct").forEach( e => e.style.display = "none"); }
function inStock() { document.querySelector("#stockQtdLabel").innerHTML = "Temos essa opção em estoque =D"; document.querySelectorAll(".cartAddProduct").forEach( e => e.style.display = "block"); }
</script> '; }}
É importante que os elementos do DOM estejam de acordo com os necessários para receber os retornos de informações
Estoque das opções das variações para o layout (estático)
As opções de variação retornam o item variationoptstockQtd para saber se está disponível em estoque, conforme exemplo abaixo
#para produto com variação (0 = simples; 1 = variação)if($productData['productType'] == 1) { $variationData = getVariationDataOfAProduct($productData['productId']); if($variationData[0] != '{}') { foreach($variationData as $k => $v) { $vId = $eachVariation['variationId']; $vName = $eachVariation['variationName']; $vRequire = $eachVariation['variationRequire']; $vChoices = $eachVariation['variationChoices']; $vParentId = $eachVariation['parentId']; $variationReqsOk = 'false'; //each variation options $options = $eachVariation['options']; if(!empty($options)) { foreach($options as $o => $d) { $optStock = $d['variationoptstockQtd']; if($optStock == "0" || $optStock == "") { #not avaliable } } }}