Vai al contenuto
Esempi di Script

Migrating a BOGO that ran across the whole cart

How most agency-written BOGOs worked: pool every eligible unit, sort it, then peel off the discounted ones. Sort ascending and the cheapest units are free. Sort descending and they are not. The class names differ by one word.

Ricostruito
Cosa faceva lo Script

It pooled every eligible unit in the cart, sorted them by price, and discounted a share of them.

I merchant lo hanno scritto in 2 modi diversi, e non significano tutti la stessa cosa. Ogni variante è riportata sotto con il proprio carrello e i propri numeri.

Provalo sul tuo negozio

Incollalo in Recupero Script e guarda cosa ricostruisce

  1. Copia il Ruby con il pulsante accanto a ogni Script di questa pagina.
  2. Nell'admin di Shopify apri Stackable, poi Strumenti, poi Recupero Script.
  3. Incollalo lì, leggi cosa dichiara di costruire lo strumento e confrontalo con le impostazioni di questa pagina.

Recupero Script è nel piano Pro. Non viene pubblicato nulla finché non dichiari quanto scontava il vecchio Script e le due cifre non coincidono al centesimo.

Bogo cross line interleaved (D17)

Ricostruito

Coppia rischiosa D17. Questo file e il suo gemello sembrano quasi identici e si comportano in modo diverso, quindi leggili entrambi prima di decidere quale hai.

Il Ruby originale

class InterleavedPartitioner
  def initialize(paid_item_count, discounted_item_count)
    @paid_item_count = paid_item_count
    @discounted_item_count = discounted_item_count
  end

  def partition(cart, applicable_line_items)
    sorted_items = applicable_line_items.sort_by { |line_item| line_item.variant.price }.reverse
    discounted_items = []
    paid_items_seen = 0
    discounted_items_seen = 0

    sorted_items.each do |line_item|
      line_item.quantity.times do
        if paid_items_seen < @paid_item_count
          paid_items_seen += 1
        else
          discounted_items_seen += 1
          discounted_items.push(line_item.split(take: 1))
          if discounted_items_seen == @discounted_item_count
            paid_items_seen = 0
            discounted_items_seen = 0
          end
        end
      end
    end

    discounted_items
  end
end

CAMPAIGNS = [
  BogoCampaign.new(
    ProductTagSelector.new("bogo"),
    PercentageDiscount.new(100, "Buy 2 get 1 free"),
    InterleavedPartitioner.new(2, 1)
  ),
]

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

Output.cart = Input.cart
In cosa si trasforma

Riconosciuto come Buy X, get Y e ricostruito come offerta di tipo bxgy. Queste sono le vere chiavi di configurazione con cui l'offerta viene salvata, così puoi confrontare la tua ricostruzione campo per campo.

Ogni impostazione, nel dettaglio
ImpostazioneValoreChiave di configurazione
Offer typebxgytype
Countingper_groupcounting
Recurrencerepeatrecurrence
Tier 1min qty 2 -> free itemtiers[0]
Buy quantity2bxgy.buyQty
Get quantity1bxgy.getQty
Get selectionsame_itembxgy.getSelection
Reward on the get units100% offbxgy.getDiscountPct
Free units are additionaltruebxgy.freeUnitsAreAdditional
Target scopetagstarget.scope
Target includesbogotarget.includeIds
MethodautomaticdiscountMethod
Allocationstandardstacking.allocation
Combines with other discountsnostacking
Ti verrà chiesta una conferma
  • Your Script limited this to a tag, vendor, or product type. We carried that filter over, so confirm it selects the products you expect.
Ti verrà comunicato
  • Your Script used Shopify's own item ordering to choose what to discount. We use the campaign's allocation order, which can pick a different item in a mixed cart.
Il carrello che lo dimostra

Creato sul nostro negozio demo pubblico, Meridian Goods, così ogni prezzo qui si può riprodurre invece di doverci credere sulla parola. Lo sconto qui sotto è quello che lo stesso motore che gira al checkout calcola per questo esatto carrello.

  • No Meridian Goods product carries the tag bogo. Set it on Aria Wireless Earbuds in Shopify before you build the cart, and on nothing else.
Il carrello che attiva questa offerta, e quanto costa
ArticoloQtàPrezzo unit.
Aria Wireless Earbuds3$79.00
Subtotale$237.00
Sconto-$79.00
Totale$158.00

Nessun accesso, oppure accesso come cliente senza tag.

La cifra con cui lo strumento ti confronta

Prima della pubblicazione, lo strumento chiede cosa faceva il tuo vecchio Script a un carrello che hai già. Impostalo su 3 di Aria Wireless Earbuds a $79.00 e la risposta è fissata.

Lo sconto è $79.00. Il totale pagato dal cliente è $158.00.

Il confronto è esatto, fino alla più piccola unità della tua valuta. Un centesimo di scarto e la pubblicazione resta bloccata, che è tutto il senso di questo passaggio.

Il carrello che non deve produrre nulla
  • drop to 1 of the same product, under what the rule needs
Il carrello che non deve attivare questa offerta
ArticoloQtàPrezzo unit.
Aria Wireless Earbuds1$79.00
Subtotale$79.00
Totale$79.00

Nessun accesso, oppure accesso come cliente senza tag.

Bogo cross line low to high (D17)

Ricostruito

Coppia rischiosa D17. Questo file e il suo gemello sembrano quasi identici e si comportano in modo diverso, quindi leggili entrambi prima di decidere quale hai.

Il Ruby originale

class LowToHighPartitioner
  def initialize(paid_item_count, discounted_item_count)
    @paid_item_count = paid_item_count
    @discounted_item_count = discounted_item_count
  end

  def partition(cart, applicable_line_items)
    sorted_items = applicable_line_items.sort_by { |line_item| line_item.variant.price }
    total_applicable_items = sorted_items.map(&:quantity).reduce(0, :+)
    discounted_items_to_find = (total_applicable_items / (@paid_item_count + @discounted_item_count)) * @discounted_item_count
    discounted_items = []

    sorted_items.each do |line_item|
      break if discounted_items_to_find <= 0
      take = [line_item.quantity, discounted_items_to_find].min
      discounted_items.push(line_item.split(take: take))
      discounted_items_to_find -= take
    end

    discounted_items
  end
end

CAMPAIGNS = [
  BogoCampaign.new(
    ProductTagSelector.new("bogo"),
    PercentageDiscount.new(100, "Buy 2 get 1 free"),
    LowToHighPartitioner.new(2, 1)
  ),
]

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

Output.cart = Input.cart
In cosa si trasforma

Riconosciuto come Buy X, get Y e ricostruito come offerta di tipo bxgy. Queste sono le vere chiavi di configurazione con cui l'offerta viene salvata, così puoi confrontare la tua ricostruzione campo per campo.

Ogni impostazione, nel dettaglio
ImpostazioneValoreChiave di configurazione
Offer typebxgytype
Countingper_groupcounting
Recurrencerepeatrecurrence
Tier 1min qty 2 -> free itemtiers[0]
Buy quantity2bxgy.buyQty
Get quantity1bxgy.getQty
Get selectioncheapest_eligiblebxgy.getSelection
Reward on the get units100% offbxgy.getDiscountPct
Free units are additionaltruebxgy.freeUnitsAreAdditional
Target scopetagstarget.scope
Target includesbogotarget.includeIds
MethodautomaticdiscountMethod
Allocationstandardstacking.allocation
Combines with other discountsnostacking
Ti verrà chiesta una conferma
  • Your Script limited this to a tag, vendor, or product type. We carried that filter over, so confirm it selects the products you expect.
Il carrello che lo dimostra

Creato sul nostro negozio demo pubblico, Meridian Goods, così ogni prezzo qui si può riprodurre invece di doverci credere sulla parola. Lo sconto qui sotto è quello che lo stesso motore che gira al checkout calcola per questo esatto carrello.

  • No Meridian Goods product carries the tag bogo. Set it on Aria Wireless Earbuds and Impact Phone Case in Shopify before you build the cart, and on nothing else.
Il carrello che attiva questa offerta, e quanto costa
ArticoloQtàPrezzo unit.
Impact Phone Case2$24.00
Aria Wireless Earbuds1$79.00
Subtotale$127.00
Sconto-$24.00
Totale$103.00

Nessun accesso, oppure accesso come cliente senza tag.

La cifra con cui lo strumento ti confronta

Prima della pubblicazione, lo strumento chiede cosa faceva il tuo vecchio Script a un carrello che hai già. Impostalo su 3 di Impact Phone Case a $24.00 e la risposta è fissata.

Lo sconto è $24.00. Il totale pagato dal cliente è $48.00.

Il confronto è esatto, fino alla più piccola unità della tua valuta. Un centesimo di scarto e la pubblicazione resta bloccata, che è tutto il senso di questo passaggio.

Il carrello che non deve produrre nulla
  • drop to 1 of the same product, under what the rule needs
Il carrello che non deve attivare questa offerta
ArticoloQtàPrezzo unit.
Impact Phone Case1$24.00
Subtotale$24.00
Totale$24.00

Nessun accesso, oppure accesso come cliente senza tag.

Due file che sembrano uguali

Ogni coppia qui sotto è la stessa forma di Script scritta in due modi. Cambiano una o due righe e fanno cose diverse, quindi leggile entrambe prima di decidere quale hai.

Coppia insidiosa D17

Bogo cross line interleaved (D17)

Ricostruito

Ricostruito come offerta bxgy.

Sconto sul suo carrello: $79.00

Righe che cambiano
class InterleavedPartitioner
    sorted_items = applicable_line_items.sort_by { |line_item| line_item.variant.price }.reverse
    paid_items_seen = 0
    discounted_items_seen = 0
      line_item.quantity.times do
        if paid_items_seen < @paid_item_count

E altre 11 righe diverse, sulla sua pagina.

Leggi BOGO across the cart

Bogo cross line low to high (D17)

Ricostruito

Ricostruito come offerta bxgy.

Sconto sul suo carrello: $24.00

Righe che cambiano
class LowToHighPartitioner
    sorted_items = applicable_line_items.sort_by { |line_item| line_item.variant.price }
    total_applicable_items = sorted_items.map(&:quantity).reduce(0, :+)
    discounted_items_to_find = (total_applicable_items / (@paid_item_count + @discounted_item_count)) * @discounted_item_count
      break if discounted_items_to_find <= 0
      take = [line_item.quantity, discounted_items_to_find].min

E altre 3 righe diverse, sulla sua pagina.

Leggi BOGO across the cart

Domande frequenti

Will Stackable rebuild this script?
Yes. Every spelling on this page is rebuilt today as a bxgy offer, and the cart above is the one that proves it.
What cart proves it works?
3 x Aria Wireless Earbuds at $79.00. The engine takes $79.00 off, and checkout charges $158.00.
What will I have to check before publishing?
Your Script limited this to a tag, vendor, or product type. We carried that filter over, so confirm it selects the products you expect. Your Script used Shopify's own item ordering to choose what to discount. We use the campaign's allocation order, which can pick a different item in a mixed cart.

Forme di Script correlate

Buy one get one free

A set of paid units earns an extra unit at no charge.

Buy X get Y, inclusive

The same buy-and-get offer, counted so the reward sits inside each set rather than beside it.

Limit the discounted units

The discount applied to the first few units only, with the rest at full price.

Incolla il tuo Script e guardalo ricostruito

La ricostruzione viene confrontata con l'importo che il tuo vecchio Script applicava, prima che tu possa pubblicarla.

Utilizziamo cookie essenziali per il funzionamento del sito e, solo con il Suo consenso, cookie di analisi per comprendere il traffico. Legga la nostra Informativa sui Cookie.