Habla sobre todo lo relacionado con Shopify y el comercio electrónico
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
@Anonymous_item_selector = qualifiers.last unless @Anonymous_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, @Anonymous_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)
@Anonymous_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 @Anonymous_item_selector.nil?
applicable_buy_items = cart.line_items
else
applicable_buy_items = cart.line_items.select { |item| @Anonymous_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
@Anonymous = 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, @Anonymous)
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
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?
To learn more visit the Shopify Help Center or the Community Blog.
¿Alguna vez has creado una colección y has tenido problemas para añadir tus productos a...
By Ann Sep 10, 2024Una de las cosas que más presión genera a la hora de emprender con un negocio es conver...
By Teo Aug 20, 2024¿Alguna vez has visitado una página web lenta con imágenes pixeladas? ¿Qué haces cuando...
By Ann Aug 13, 2024