Pular para o conteúdo
Exemplos de Scripts

Migrating a Shopify Help Center script template

Every example script Shopify published shared one skeleton: a settings constant the merchant edited, a banner comment, then class code nobody was meant to touch. If your file opens with a row of equals signs, this is the dialect you have.

Reconstruído
O que o Script fazia

It read the merchant-edited constant at the top of the file and applied that discount to every matching line.

Os lojistas escreveram isso de 2 formas diferentes, e nem todas significam a mesma coisa. Cada variação está abaixo com o próprio carrinho e os próprios números.

Teste na sua própria loja

Cole no Resgate de Scripts e veja o que ele reconstrói

  1. Copie o Ruby no botão ao lado de qualquer Script desta página.
  2. No admin da Shopify, abra o Stackable, depois Ferramentas e depois Resgate de Scripts.
  3. Cole lá, leia o que a ferramenta diz que vai criar e compare com as configurações desta página.

O Resgate de Scripts está no plano Pro. Nada é publicado até você informar quanto o Script antigo descontava e os dois valores baterem no centavo.

Official dialect, tiered spend

Reconstruído
O Ruby original

# ================================ Customizable Settings ================================
# ================================================================
# Tiered Discount by Spend
#
#   If the cart total is greater than (or equal to) an entered
#   threshold, the associated discount is applied to each item.
# ================================================================
SPENDING_THRESHOLDS = [
  {
    threshold: 30,
    discount_type: :percent,
    discount_amount: 10,
    discount_message: '10% off for spending over $30',
  },
  {
    threshold: 60,
    discount_type: :percent,
    discount_amount: 15,
    discount_message: '15% off for spending over $60',
  },
]

# ================================ Script Code (do not edit) ================================
class DiscountApplicator
  def initialize(discount_type, discount_amount, discount_message)
    @discount_type = discount_type
    @discount_message = discount_message

    @discount_amount = if discount_type == :percent
      1 - (discount_amount * 0.01)
    else
      Money.new(cents: 100) * discount_amount
    end
  end

  def apply(line_item)
    new_line_price = if @discount_type == :percent
      line_item.line_price * @discount_amount
    else
      [line_item.line_price - (@discount_amount * line_item.quantity), Money.zero].max
    end

    line_item.change_line_price(new_line_price, message: @discount_message)
  end
end

class TieredDiscountBySpendCampaign
  def initialize(campaigns)
    @campaigns = campaigns
  end

  def run(cart)
    applicable_campaign = nil

    @campaigns.each do |campaign|
      threshold = Money.new(cents: 100) * campaign[:threshold]
      applicable_campaign = campaign if cart.subtotal_price >= threshold
    end

    return if applicable_campaign.nil?

    discount_applicator = DiscountApplicator.new(
      applicable_campaign[:discount_type],
      applicable_campaign[:discount_amount],
      applicable_campaign[:discount_message],
    )

    cart.line_items.each do |line_item|
      discount_applicator.apply(line_item)
    end
  end
end

CAMPAIGNS = [
  TieredDiscountBySpendCampaign.new(SPENDING_THRESHOLDS),
]

CAMPAIGNS.each do |campaign|
  campaign.run(Input.cart)
end

Output.cart = Input.cart
No que ele vira

Reconhecido como Spend threshold discount e reconstruído como uma oferta do tipo spend_goal. Estas são as chaves de configuração reais com as quais a oferta é salva, então você pode conferir a sua própria reconstrução campo a campo.

Cada configuração, detalhada
ConfiguraçãoValorChave de configuração
Offer typespend_goaltype
Countingper_cartcounting
Recurrenceoncerecurrence
Tier 1min spend $30.00 -> 10% offtiers[0]
Tier 2min spend $60.00 -> 15% offtiers[1]
Target scopealltarget.scope
MethodautomaticdiscountMethod
Allocationstandardstacking.allocation
Combines with other discountsnostacking
Você vai precisar confirmar
  • Confirm which products this applies to. We could not read product targeting from the script.
O carrinho que comprova

Montado na nossa loja de demonstração pública, Meridian Goods, para que cada preço aqui possa ser reproduzido em vez de aceito por confiança. O desconto abaixo é o que o mesmo motor que roda no checkout calcula para este carrinho exato.

O carrinho que aciona esta oferta, e quanto ela custa
ItemQtdPreço unit.
Softcover Notebook Set1$18.00
Braided USB-C Cable1$14.00
Subtotal$32.00
Desconto-$3.20
Total$28.80

Sem login, ou logado como cliente sem tags.

O número com o qual a ferramenta compara você

Antes de publicar, a ferramenta pergunta o que o seu Script antigo fazia com um carrinho que você já tem. Defina como 2 de Softcover Notebook Set a $18.00 e a resposta fica fixa.

O desconto é $3.60. O total que o cliente pagou é $32.40.

A comparação é exata, até a menor unidade da sua moeda. Um centavo de diferença e a publicação continua bloqueada, que é justamente o objetivo desta etapa.

O carrinho que não pode produzir nada
  • swap the cart for a single Braided USB-C Cable
O carrinho que não pode acionar esta oferta
ItemQtdPreço unit.
Braided USB-C Cable1$14.00
Subtotal$14.00
Total$14.00

Sem login, ou logado como cliente sem tags.

Official dialect, lineitem applicator (D16)

Reconstruído

Par perigoso D16. Este arquivo e o parceiro dele são quase idênticos e se comportam de formas diferentes, então leia os dois antes de decidir qual é o seu.

O Ruby original

# ================================ Customizable Settings ================================
DISCOUNT_TYPE = :percent
DISCOUNT_AMOUNT = 10
DISCOUNT_MESSAGE = '10% off everything'

# ================================ Script Code (do not edit) ================================
class DiscountApplicator
  def initialize(discount_type, discount_amount, discount_message)
    @discount_type = discount_type
    @discount_message = discount_message

    @discount_amount = if discount_type == :percent
      1 - (discount_amount * 0.01)
    else
      Money.new(cents: 100) * discount_amount
    end
  end

  def apply(line_item)
    new_line_price = if @discount_type == :percent
      line_item.line_price * @discount_amount
    else
      [line_item.line_price - (@discount_amount * line_item.quantity), Money.zero].max
    end

    line_item.change_line_price(new_line_price, message: @discount_message)
  end
end

class ProductDiscountCampaign
  def initialize(discount_applicator)
    @discount_applicator = discount_applicator
  end

  def run(cart)
    cart.line_items.each do |line_item|
      @discount_applicator.apply(line_item)
    end
  end
end

CAMPAIGNS = [
  ProductDiscountCampaign.new(
    DiscountApplicator.new(DISCOUNT_TYPE, DISCOUNT_AMOUNT, DISCOUNT_MESSAGE),
  ),
]

CAMPAIGNS.each do |campaign|
  campaign.run(Input.cart)
end

Output.cart = Input.cart
No que ele vira

Reconhecido como Percentage off e reconstruído como uma oferta do tipo volume. Estas são as chaves de configuração reais com as quais a oferta é salva, então você pode conferir a sua própria reconstrução campo a campo.

Cada configuração, detalhada
ConfiguraçãoValorChave de configuração
Offer typevolumetype
Countingper_productcounting
Recurrenceoncerecurrence
Tier 1min qty 1 -> 10% offtiers[0]
Target scopealltarget.scope
MethodautomaticdiscountMethod
Allocationstandardstacking.allocation
Combines with other discountsnostacking
Você vai precisar confirmar
  • Confirm which products this applies to. We could not read product targeting from the script.
O carrinho que comprova

Montado na nossa loja de demonstração pública, Meridian Goods, para que cada preço aqui possa ser reproduzido em vez de aceito por confiança. O desconto abaixo é o que o mesmo motor que roda no checkout calcula para este carrinho exato.

O carrinho que aciona esta oferta, e quanto ela custa
ItemQtdPreço unit.
Braided USB-C Cable1$14.00
Subtotal$14.00
Desconto-$1.40
Total$12.60

Sem login, ou logado como cliente sem tags.

O número com o qual a ferramenta compara você

Antes de publicar, a ferramenta pergunta o que o seu Script antigo fazia com um carrinho que você já tem. Defina como 1 de Braided USB-C Cable a $14.00 e a resposta fica fixa.

O desconto é $1.40. O total que o cliente pagou é $12.60.

A comparação é exata, até a menor unidade da sua moeda. Um centavo de diferença e a publicação continua bloqueada, que é justamente o objetivo desta etapa.

O carrinho que não pode produzir nada

This rule carries no condition at all, so it fires on any cart holding anything and there is no quiet cart to build. The negative check is an empty cart, which the app runs for you. That is correct behaviour, not a failure.

Dois arquivos que parecem iguais

Cada dupla abaixo é a mesma forma de Script escrita de dois jeitos. Elas mudam em uma ou duas linhas e fazem coisas diferentes, então leia as duas antes de decidir qual é a sua.

Dupla perigosa D16

Official dialect, lineitem applicator (D16)

Reconstruído

Reconstruído como oferta volume.

Desconto no carrinho dele: $1.40

Linhas que mudam
DISCOUNT_MESSAGE = '10% off everything'
      1 - (discount_amount * 0.01)
  def apply(line_item)
    new_line_price = if @discount_type == :percent
      line_item.line_price * @discount_amount
      [line_item.line_price - (@discount_amount * line_item.quantity), Money.zero].max

E mais 8 linhas diferentes, na página dela.

Ler Help Center script template

Official dialect, shipping applicator (D16)

Reconstruído

Reconstruído como oferta free_shipping.

Economia de frete no carrinho dele: $0.69

Linhas que mudam
DISCOUNT_MESSAGE = '10% off shipping'
      discount_amount * 0.01
  def apply(shipping_rate)
    discount_amount = if @discount_type == :percent
      shipping_rate.price * @discount_amount
      @discount_amount > shipping_rate.price ? shipping_rate.price : @discount_amount

E mais 8 linhas diferentes, na página dela.

Ler Percentage off shipping

Perguntas frequentes

Will Stackable rebuild this script?
Yes. Every spelling on this page is rebuilt today as a spend_goal offer, and the cart above is the one that proves it.
What cart proves it works?
1 x Softcover Notebook Set at $18.00 plus 1 x Braided USB-C Cable at $14.00. The engine takes $3.20 off, and checkout charges $28.80.
What will I have to check before publishing?
Confirm which products this applies to. We could not read product targeting from the script.

Formatos de Script relacionados

Percentage off shipping

A share taken off every delivery rate at checkout.

Script Creator output

Generator output, with a CAMPAIGNS array at the bottom that states the merchant’s intent as data.

Cole o seu Script e veja a reconstrução

A reconstrução é comparada com o valor que o seu Script antigo cobrava antes de você poder publicá-la.

Usamos cookies essenciais para operar este site e, apenas com sua permissão, cookies de análise para entender o tráfego. Leia nossa Política de Cookies.