Guia da Extensão #11 Promoções

Uso da extensão que gerencia a exibição de preços, desconto por meios de pagamento, categorias e produtos e cupom (em breve)

Ícone Compartilhar no Whatsapp Ícone Compartilhar no Twitter Ícone Compartilhar por e-mail

1. Preços

Os preços contram como o preço é exibido na loja virtual.

Imagem precos

A composição dos preços tem o objetivo de customizar sua exibição conforme intenções do lojistas e contatenar todos os descontos e frete grátis.

Como o preço é consumido no layout:


$priceLabelData = getPriceLabelData();$priceLabelData['pricelabelInstallments']; /*installments (quantity)*/$priceLabelData['pricelabelShowFess']; /* 0 = "sem juros"; 1 = "com juros"*/$priceLabelData['pricelabelShowBiggestPaymentDiscount']; /*0 = no ; 1 = yes*/$priceLabelData['pricelabelShowFullPriceCrossedOut']; /*show full price; 0 = no ; 1 = yes;*/$priceLabelData['pricelabelApplyToLists']; /* 0 = no; 1 = yes; ... if not, price label is used only on product page;*/


 ⚠️ Sem dúvida as diretrizes de preços necessitam das outras funções que irão consumir os descontos e realizar os cálculos. Por exemplo, vai precisar calcular o maior desconto da forma de pagamento caso queira exibí-la.


2. Desconto das formas de pagamento

São descontos aplicados em porcentagem para as formas de pagamento.

⚠️ Mercado Pago: É aplicado um desconto único, independente de pagar com cartão, PIX ou Boleto.

Como coletar as formas de pagamento no layout (pegar o maior desconto e exibir uma publicidade sobre isso):


$paymentDiscounts = getPaymentDiscounts();

//get the biggest discount from $paymentDiscounts array$bestPaymentDiscount = max($paymentDiscounts);$bestPaymentMethod = array_search($bestPaymentDiscount, $paymentDiscounts);//0 = manual ; 1 = mercado pago; 2 = picpay; $paymentMethods = ['depósito ou PIX', 'Mercado Pago', 'PicPay'];$bestPaymentMethod = $paymentMethods[$bestPaymentMethod];

//show best payment advertiseif($bestPaymentDiscount > 0) {   $home .= '<div class="row"><div class="col-12"><h1 class="paymentMethodAdvertise">Toda a loja com          <strong>'.$bestPaymentDiscount.'%</strong> no pagamento com <strong>'.$bestPaymentMethod.'</strong>  </h1></div></div>';}$home .= '<div class="row productsList" id="listProductsContainer"><div class="col-12"><h1 class="mt-0">Produtos em <strong>destaque</strong></h1></div>';

3. Descontos

De forma geral, os descontos vão aplicar subtração em valor absoluto ou porcentagem no valor de cada produto.

Os descontos seguem a sequência de descontos globais, categoria principal, adicionais, produto e forma de pagamento, conforme a imagem:

Imagem descontos

Os descontos são aplicados sob o resultado do desconto anterior e não simplesmente somados.

Situação:- 5% de desconto global- 5% de desconto na categoria principal- Duas categorias adicionais do produto também tem o desconto de 5%- O produto em si tem desconto de 5%- O meio de pagamento escolhido possui 5% de desconto- O produto custa R$100

Imagem descontos_com_preco

O mesmo para valores absolutos. Por exemplo: Uma loja com todos os produtos R$10 OFF tem um produto de R$100 com 5% de desconto ficaria (100-10) = 90 - (90*0.05) = 85,50. 

🚚 Desconto com frete grátis

O frete grátis é aplicado desde que esteja presente em qualquer nível para que na loja não haja falácia, conforme a imagem abaixo:

Imagem free_shipping_product

⚠️ Caso um ou mais produtos não tiverem frete grátis o frete é cobrado normalmente no checkout.

Imagem no_free_shipping_for_order

3.1 Descontos para lojas

⚠️ Só pode haver um desconto para a loja. Caso a loja tenha um desconto e se cadastre outro, o antigo será deletado.

O desconto pode ser em % ou em R$.

Como chama o desconto para o layout:


//o desconto para toda loja é o categoryDiscounts[0] (categoria 0 = toda a loja), $productPrice é o preço do produto$categoryDiscounts = getCategoriesDiscount();

//global category discountif(isset($categoryDiscounts[0])) {   //show price with R$ discount   if($categoryDiscounts[0]['categorydiscountType'] == 0) {      $productPrice = round((($productPrice-$categoryDiscounts[0]['categorydiscountValue'])), 2);   }   else {   //show price with % discount      $productPrice = round((($productPrice*(100-$categoryDiscounts[0]['categorydiscountValue']))/100), 2);   }   //show free shipping label   if($categoryDiscounts[0]['categorydiscountFreeShipping'] == 1) {      $categoryDiscount[0]['categorydiscountMessage'] == '' ? $freeShippingLabel = 'Frete Grátis' : $freeShippingLabel = $categoryDiscount[0]['categorydiscountMessage'];    } }


3.2 Descontos para categorias

Semelhante ao descontos para as lojas, entretanto, usando o id da categoria principal e iterando entre as categorias adicionais.

⚠️ Página do produto: A mensagem de frete grátis aplicada à loja é a última utilizada no desconto, por exemplo: a mensagem de frete grátis do desconto do produto sempre sobreescreverá a mensagem de frete grátis da categoria.


⚠️ Frete grátis no cálculo do carrinho e checkout: Para o pedido ter frete grátis, é necessário que a mensagem contenha a palavra "grátis"todos os produtos estejam em categorias com o desconto, senão, o desconto é descartado. 


⚠️ Frete grátis no cálculo do carrinho e checkout, mas sem a palavra "grátis": Nesta situação, supondo que a mensagem seja "Frete a combinar" (sem a palavra grátis), a mensagem será exibida no cálculo de frete do carrinho e no checkout. No checkout, o usuário poderá escolher a forma para os demais produtos. 


//apply discount for product main categoryif(array_key_exists($categoryData['categoryId'], $categoryDiscounts)) {   if($categoryDiscounts[$categoryData['categoryId']]['categorydiscountType'] == 0) {      //discount value      $productPrice = round((($productPrice-$categoryDiscounts[$categoryData['categoryId']]['categorydiscountValue'])), 2);   }   else {      //discount percent      $productPrice = round((($productPrice*(100-$categoryDiscounts[$categoryData['categoryId']]['categorydiscountValue']))/100), 2);   }   if($categoryDiscounts[$categoryData['categoryId']]['categorydiscountFreeShipping'] == 1) {      $categoryDiscounts[$categoryData['categoryId']]['categorydiscountMessage'] == '' ? $freeShippingLabel = 'Frete Grátis' : $freeShippingLabel = $categoryDiscounts[$categoryData['categoryId']]['categorydiscountMessage'];   }}

//check for additionalcategories array: additionalCatsIds[]if(isset($product['additionalCatsIds'])) {   $additionalCatsIds = $product['additionalCatsIds'];   foreach($additionalCatsIds as $k => $v) {      if(array_key_exists($v, $categoryDiscounts)) {         if($categoryDiscounts[$v]['categorydiscountType'] == 0) {         //discount value         $productPrice = round((($productPrice-$categoryDiscounts[$v]['categorydiscountValue'])), 2);      }      else {         //discount percent         $productPrice = round((($productPrice*(100-$categoryDiscounts[$v]['categorydiscountValue']))/100), 2);      }      if($categoryDiscounts[$v]['categorydiscountFreeShipping'] == 1) {         $categoryDiscounts[$v]['categorydiscountMessage'] == '' ? $freeShippingLabel = 'Frete Grátis' :       $freeShippingLabel = $categoryDiscounts[$v]['categorydiscountMessage'];      }   }}


3.3 Descontos para os produtos


⚠️ Desconto de Frete Grátis na Página do produto: A mensagem aparece na página do produto. Caso a categoria também tenha frete grátis, a mensagem do produto sobrescreverá a da categoria (a do produto é mais importante).


⚠️ Produto com desconto de frete grátis no carrinho com outros sem frete grátis: Nesta situação o frete grátis é anulado e o cálculo é realizado normalmente pelo serviço de entrega. 


//check if product has discount if(array_key_exists($product['id'], $productsDiscounts)) {  if($productsDiscounts[$product['id']]['productdiscountType'] == 0) {   //discount value   $productPrice = round((($productPrice-$productsDiscounts[$product['id']]['productdiscountValue'])), 2);  }  else {   //discount percent   $productPrice = round((($productPrice*(100-$productsDiscounts[$product['id']]['productdiscountValue']))/100), 2);  }  if($productsDiscounts[$product['id']]['productdiscountFreeShipping'] == 1) {   $productsDiscounts[$product['id']]['productdiscountMessage'] == '' ? $freeShippingLabel = 'Frete Grátis' : $freeShippingLabel = $productsDiscounts[$product['id']]['productdiscountMessage'];  }  }


É importante que no carrinho, o atributo discountedProductPrice esteja funcionando para conseguir manipular os dados por script, principalmente de variações.

Exemplo funcional do botão do carrinho no layout do produto:


<a class="cartAddProduct cartPopupView" cartitemid="'.$productData['productSKU'].'" cartitemname="'.$productData['productTitle'].'" cartitemimage="'.str_replace('w_0_', 'w_100_', $productImg).'" cartitemlink="'.$mainData['configPath'].'/item/'.$productData['productUrl'].'" cartitemprice="'.$productPrice.'" cartaddlimit="5" originalProductPrice="'.$productData['productPrice'].'" discountedProductPrice="'.$productPrice.'">Adicionar na sacola</a>


4. Cupom

O cupom está presente no checkout de forma automática. É importante entender suas políticas:

  1. O cupom não diminui o valor do frete.Um cupom de 10% off aplicado em uma compra de R$100 com frete de R$20 obterá R$ 90+R$ 20
  2. Um cupom nunca pode iniciar no passado.
  3. O código inserido do cupom pode ser minúsculo ou maiúsculo que funcionara;
  4. O cupom é checado no checkout, em qualquer etapa após confirmação do usuário (como alguns cupons são vinculados à usuários, é necessário que esteja logado para usar);
  5. O cupom aparece no pedido, tanto no painel quanto na tela do cliente. Os dados do cupom não são enviados por e-mail;


Sobre as funcionalidades:


Imagem cupom

  1. O valor do cupom é sempre um número inteiro;
  2. O cupom pode ser em porcentagem ou em valor real. Pedidos com valor igual a zero ou negativos não funcionam;
  3. Quantas vezes o cupom pode ser usado em toda a loja;
  4. Quantas vezes o cupom pode ser usado pela mesma pessoa;
  5. Código que o usuário precisa inserir para validar o cupom;
  6. Nome do cupom para uso interno, o usuário não vê;
  7. Descrição do cupom para uso interno, o usuário não vê;
  8. Início da validade do cupom;
  9. Data de expiração do cupom;
  10. Att (11/02) Agora é possível definir se o cupom possui frete grátis no botão de "habilitar frete grátis"

Imagem checkout_cupom

No checkout, o cupom (conforme imagem acima) altera o preço total da compra, escreve uma mensagem customizada avisando sobre o cupom e o mesmo pode ser removido a qualquer momento.

O cupom sempre está localizado após o botão de Finalizar compra do checkout.

Gostei desse artigo Não gostei desse artigo

Você também pode gostar de ler

Imagem principal do artigo Guia completo para o catálogo de produtos (Extensão)

Guia completo para o catálogo de produtos (Extensão)

Instalação, passo a passo e guia prático para utilizar o catálogo no site dos clientes

Em 14/06/2022 às 13h38 - Atualizado em 11/04/2025 às 13h17

Imagem principal do artigo Guia da Extensão #11 Promoções

Guia da Extensão #11 Promoções

Uso da extensão que gerencia a exibição de preços, desconto por meios de pagamento, categorias e produtos e cupom (em breve)

Em 04/09/2023 às 10h41 - Atualizado em 12/02/2025 às 09h16

Imagem principal do artigo Carrinho de compras cart2.js

Carrinho de compras cart2.js

Extensão 6 do Interago para habilitar o uso de carrinho de compras ao website

Em 29/11/2022 às 12h54 - Atualizado em 03/02/2025 às 11h54

Imagem principal do artigo Buscas e Pesquisas no Catálogo de produtos

Buscas e Pesquisas no Catálogo de produtos

Script ativo é o search3.js. Buscas em cache com visualização no painel.

Em 01/03/2023 às 09h23 - Atualizado em 16/12/2024 às 11h48

Imagem principal do artigo Extensão #9 Envios e cálculos de frete

Extensão #9 Envios e cálculos de frete

Extensão que utiliza a Fretnet, Correios, controle por estados e configurações gerais para controle de envios

Em 23/03/2023 às 20h22 - Atualizado em 15/09/2023 às 09h49

Imagem principal do artigo Checkout e Pedidos - Extensão #10

Checkout e Pedidos - Extensão #10

Guia para lojas virtuais utilizarem a extensão de checkout e suas especificações

Em 01/06/2023 às 14h35 - Atualizado em 18/08/2023 às 08h36

Imagem principal do artigo Estoque do Catálogo de Produtos - Layout, Uso e Consultas

Estoque do Catálogo de Produtos - Layout, Uso e Consultas

Como adicionar informações de estoque no layoute realizar consultas assíncronas

Em 13/02/2023 às 14h40 - Atualizado em 07/08/2023 às 22h28

Imagem principal do artigo Catálogo de Produtos - Listar Produtos com AJAX

Catálogo de Produtos - Listar Produtos com AJAX

Como gerar listas de produtos diretamente da base de dados por ajax

Em 09/08/2022 às 11h03 - Atualizado em 26/12/2022 às 09h37

Imagem principal do artigo 001. Catálogo em Lista - Formato Imobiliária

001. Catálogo em Lista - Formato Imobiliária

Visual de todas as páginas do catálogo de produtos em formato de lista - Ideal para imobiliárias

Em 29/06/2022 às 11h22 - Atualizado em 16/08/2022 às 09h09