Saltar al contenido
Ejemplos 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.

Reconstruido
Qué hacía el Script

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

Los comerciantes escribieron esto de 2 formas distintas, y no todas significan lo mismo. Cada variante aparece abajo con su propio carrito y sus propias cifras.

Pruébalo en tu propia tienda

Pégalo en Rescate de scripts y mira qué reconstruye

  1. Copia el Ruby con el botón que hay junto a cualquier Script de esta página.
  2. En tu panel de Shopify, abre Stackable, luego Herramientas y luego Rescate de scripts.
  3. Pégalo ahí, lee lo que la herramienta dice que va a crear y compáralo con los ajustes de esta página.

Rescate de scripts está en el plan Pro. No se publica nada hasta que le digas cuánto descontaba tu Script antiguo y las dos cifras coincidan al céntimo.

Official dialect, tiered spend

Reconstruido
El 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
En qué se convierte

Reconocido como Spend threshold discount y reconstruido como una oferta de tipo spend_goal. Estas son las claves de configuración reales con las que se guarda la oferta, así que puedes comparar tu propia reconstrucción campo por campo.

Cada ajuste, detallado
AjusteValorClave de configuración
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
Se te pedirá que confirmes
  • Confirm which products this applies to. We could not read product targeting from the script.
El carrito que lo demuestra

Creado en nuestra tienda de demostración pública, Meridian Goods, para que cada precio de aquí se pueda reproducir en lugar de darlo por bueno. El descuento de abajo es lo que calcula para este carrito exacto el mismo motor que se ejecuta en el pago.

El carrito que activa esta oferta, y lo que cuesta
ArtículoCant.Precio unit.
Softcover Notebook Set1$18.00
Braided USB-C Cable1$14.00
Subtotal$32.00
Descuento-$3.20
Total$28.80

Sin sesión iniciada, o con sesión de un cliente sin etiquetas.

La cifra con la que la herramienta te compara

Antes de publicar, la herramienta pregunta qué hacía tu Script antiguo con un carrito que ya tienes. Ponlo en 2 de Softcover Notebook Set a $18.00 y la respuesta queda fijada.

El descuento es $3.60. El total que pagó el comprador es $32.40.

La comparación es exacta, hasta la unidad más pequeña de tu moneda. Un céntimo de diferencia y la publicación sigue bloqueada, que es todo el sentido de este paso.

El carrito que no debe producir nada
  • swap the cart for a single Braided USB-C Cable
El carrito que no debe activar esta oferta
ArtículoCant.Precio unit.
Braided USB-C Cable1$14.00
Subtotal$14.00
Total$14.00

Sin sesión iniciada, o con sesión de un cliente sin etiquetas.

Official dialect, lineitem applicator (D16)

Reconstruido

Par peligroso D16. Este archivo y su pareja parecen casi idénticos y se comportan de forma distinta, así que lee los dos antes de decidir cuál tienes.

El 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
En qué se convierte

Reconocido como Percentage off y reconstruido como una oferta de tipo volume. Estas son las claves de configuración reales con las que se guarda la oferta, así que puedes comparar tu propia reconstrucción campo por campo.

Cada ajuste, detallado
AjusteValorClave de configuración
Offer typevolumetype
Countingper_productcounting
Recurrenceoncerecurrence
Tier 1min qty 1 -> 10% offtiers[0]
Target scopealltarget.scope
MethodautomaticdiscountMethod
Allocationstandardstacking.allocation
Combines with other discountsnostacking
Se te pedirá que confirmes
  • Confirm which products this applies to. We could not read product targeting from the script.
El carrito que lo demuestra

Creado en nuestra tienda de demostración pública, Meridian Goods, para que cada precio de aquí se pueda reproducir en lugar de darlo por bueno. El descuento de abajo es lo que calcula para este carrito exacto el mismo motor que se ejecuta en el pago.

El carrito que activa esta oferta, y lo que cuesta
ArtículoCant.Precio unit.
Braided USB-C Cable1$14.00
Subtotal$14.00
Descuento-$1.40
Total$12.60

Sin sesión iniciada, o con sesión de un cliente sin etiquetas.

La cifra con la que la herramienta te compara

Antes de publicar, la herramienta pregunta qué hacía tu Script antiguo con un carrito que ya tienes. Ponlo en 1 de Braided USB-C Cable a $14.00 y la respuesta queda fijada.

El descuento es $1.40. El total que pagó el comprador es $12.60.

La comparación es exacta, hasta la unidad más pequeña de tu moneda. Un céntimo de diferencia y la publicación sigue bloqueada, que es todo el sentido de este paso.

El carrito que no debe producir 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.

Dos archivos que parecen iguales

Cada pareja de abajo es una misma forma de Script escrita de dos maneras. Se diferencian en una o dos líneas y hacen cosas distintas, así que lee las dos antes de decidir cuál tienes.

Pareja peligrosa D16

Official dialect, lineitem applicator (D16)

Reconstruido

Se reconstruye como una oferta volume.

Descuento en su propio carrito: $1.40

Líneas que cambian
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

Y 8 líneas distintas más, en su propia página.

Leer Help Center script template

Official dialect, shipping applicator (D16)

Reconstruido

Se reconstruye como una oferta free_shipping.

Ahorro de envío en su propio carrito: $0.69

Líneas que cambian
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

Y 8 líneas distintas más, en su propia página.

Leer Percentage off shipping

Preguntas frecuentes

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.

Formas de Script relacionadas

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.

Pega tu Script y mira cómo se reconstruye

La reconstrucción se compara con el dinero que cobraba tu Script antiguo antes de que puedas publicarla.

Usamos cookies esenciales para el funcionamiento de este sitio y, solo con tu permiso, cookies analíticas para entender el tráfico. Lee nuestra Política de cookies.