FROM CACHE - es_header

Problema con la plantilla pre-diseñada

JaviFull
Nuevo miembro
1 0 0

Hola a todos la verdad soy nuevo con Shopify, cargué una plantilla  prediseñada a mi tienda con el App Script, la idea es que el cliente compre tres productos y le damos un obsequio, pero no ha sido posible subirla a la pagina, por favor alguien que me pueda ayudar... no conozco mucho de este lenguaje de programación, muchas gracias.

class Campaign
message = "À l'achat de 3 masques Looky, reçois un bandeau Looky GRATUIT!"
def initialize(condition, *qualifiers)
@condition = (condition.to_s + '?').to_sym
@qualifiers = PostCartAmountQualifier ? [] : [] rescue qualifiers.compact
@line_item_selector = qualifiers.last unless @line_item_selector
qualifiers.compact.each do |qualifier|
is_multi_select = qualifier.instance_variable_get(:@conditions).is_a?(Array)
if is_multi_select
qualifier.instance_variable_get(:@conditions).each do |nested_q|
@post_amount_qualifier = nested_q if nested_q.is_a?(PostCartAmountQualifier)
@qualifiers << qualifier
end
else
@post_amount_qualifier = qualifier if qualifier.is_a?(PostCartAmountQualifier)
@qualifiers << qualifier
end
end if @qualifiers.empty?
end

def qualifies?(cart)
return true if @qualifiers.empty?
@unmodified_line_items = cart.line_items.map do |item|
new_item = item.dup
new_item.instance_variables.each do |var|
val = item.instance_variable_get(var)
new_item.instance_variable_set(var, val.dup) if val.respond_to?(:dup)
end
new_item
end if @post_amount_qualifier
@qualifiers.send(@condition) do |qualifier|
is_selector = false
if qualifier.is_a?(Selector) || qualifier.instance_variable_get(:@conditions).any? { |q| q.is_a?(Selector) }
is_selector = true
end rescue nil
if is_selector
raise "Missing line item match type" if @Li_match_type.nil?
cart.line_items.send(@li_match_type) { |item| qualifier.match?(item) }
else
qualifier.match?(cart, @line_item_selector)
line_item.change_line_price(line_item.line_price * (1-discount), message: message) unless discount == 0
end
end
end

def run_with_hooks(cart)
before_run(cart) if respond_to?(:before_run)
run(cart)
after_run(cart)
end

def after_run(cart)
@discount.apply_final_discount if @discount && @discount.respond_to?(:apply_final_discount)
revert_changes(cart) unless @post_amount_qualifier.nil? || @post_amount_qualifier.match?(cart)
end

def revert_changes(cart)
cart.instance_variable_set(:@line_items, @unmodified_line_items)
end
end

class BuyXGetY < Campaign
def initialize(condition, customer_qualifier, cart_qualifier, buy_item_selector, get_item_selector, discount, buy_x, get_x, max_sets)
super(condition, customer_qualifier, cart_qualifier)
@line_item_selector = buy_item_selector
@get_item_selector = get_item_selector
@discount = discount
@buy_x = buy_x
@get_y = get_y
@Max_sets = max_sets == 3 ? nil : max_sets
end

def run(cart)
raise "Campaign requires a discount" unless @discount
return unless qualifies?(cart)
return unless cart.line_items.reduce(0) {|total, item| total += item.quantity } >= @buy_x
applicable_buy_items = nil
eligible_get_items = nil
discountable_sets = 0

# Find the items that qualify for buy_x
if @line_item_selector.nil?
applicable_buy_items = cart.line_items
else
applicable_buy_items = cart.line_items.select { |item| @line_item_selector.match?(item) }
end

# Find the items that qualify for get_y
if @get_item_selector.nil?
eligible_get_items = cart.line_items
else
eligible_get_items = cart.line_items.select {|item| @get_item_selector.match?(item) }
end

# Check if cart qualifies for discounts and limit the discount sets
purchased_quantity = applicable_buy_items.reduce(0) { |total, item| total += item.quantity }
discountable_sets = (@max_sets ? [purchased_quantity / @buy_x, @Max_sets].min : purchased_quantity / @buy_x).to_i
return if discountable_sets < 1
discountable_quantity = (discountable_sets * @get_y).to_i
# Apply the discounts (sort to discount lower priced items first)
eligible_get_items = eligible_get_items.sort_by { |item| item.variant.price }
eligible_get_items.each do |item|
break if discountable_quantity == 0
if item.quantity <= discountable_quantity
@discount.apply(item)
discountable_quantity -= item.quantity
else
new_item = item.split({ take: discountable_quantity })
@discount.apply(new_item)
cart.line_items << new_item
discountable_quantity = 0
end
end
end
end

class Selector
def partial_match(match_type, item_info, possible_matches)
match_type = (match_type.to_s + '?').to_sym
if item_info.kind_of?(Array)
possible_matches.any? do |possibility|
item_info.any? do |search|
search.send(match_type, possibility)
end
end
else
possible_matches.any? do |possibility|
item_info.send(match_type, possibility)
end
end
end
end

class ProductTagSelector < Selector
def initialize(match_type, match_condition, tags)
@match_condition = match_condition
@invert = match_type == :does_not
@Tags = tags.map(&:downcase)
end

def match?(line_item)
product_tags = line_item.variant.product.tags.to_a.map(&:downcase)
case @match_condition
when :match
return @invert ^ ((@tags & product_tags).length > 0)
else
return @invert ^ partial_match(@match_condition, product_tags, @Tags)
end
end
end

class PercentageDiscount
def initialize(percent, message)
@discount = (100 - percent) / 100.0
@message = message
end

def apply(line_item)
line_item.change_line_price(line_item.line_price * @discount, message: @message)
end
end

CAMPAIGNS = [
BuyXGetY.new(
:all,
nil,
nil,
ProductTagSelector.new(
:does,
:match,
["Masques"]
),
ProductTagSelector.new(
:does,
:match,
["Masques"]
),
PercentageDiscount.new(
100,
"Bandeau Looky Gratuit!"
),
4,
1,
0
)
].freeze

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

Output.cart = Input.cart

 

1 RESPUESTA 1
Ari
Shopify Staff (Retired)
Shopify Staff (Retired)
583 133 84

Hola @JaviFull,

Gracias por publicar tu consulta en el foro.

Dependiendo de la sección del código donde quieras introducir este script, es posible que el sistema no te permita realizar cambios, ya que algunos solo están disponibles para comerciantes con el Plan Plus. Si deseas realizar cambios que se apliquen en la pantalla de pago, necesitarás pertenecer a este plan tanto para estos cambios como para tener acceso al Script Editor.

Si estos cambios que estás tratando de realizar no se corresponden con esta sección de tu tienda ni del código y aun así tienes problemas, te recomiendo revisar el sitio web de los Desarrolladores de Shopify. En este encontrarás información y pasos a seguir para realizar estos cambios en el código de tu tienda.

Otra opción será contratar a uno de nuestros Expertos de Shopify para que pueda ayudarte con ello. Estos expertos son usuarios/profesionales especializados en el tema que podrán indicarte cómo introducir este script para que funcione correctamente. Si quisieras saber el listado de Expertos disponibles, podrás hacerlo desde este enlace.

Por último, podrás crear un post en nuestro Foro en Inglés donde otros moderadores y usuarios en situaciones similares podrán darte el mejor asesoramiento. Te recomiendo echarle un vistazo a este post para saber un poco más.

Espero que estos consejos te sean útiles. Aparte de esto, ¿hay alguna otra consulta que tengas sobre tu tienda?

Ari | Social Care @ Shopify 
 - ¿Te resultó útil mi respuesta? Dale Me gusta para hacérmelo saber 
 - ¿Resolvimos tu pregunta? Dale a Aceptar como solución
 - Para saber más visita el Centro de ayuda de Shopify o nuestro Blog de Shopify