как я могу добавить скрипт скидки уровня в Shopify debut theme без использования приложения script editor

#javascript #ruby #ajax #shopify #liquid

#javascript #ruby #ajax #Shopify #жидкость

Вопрос:

Я новичок в Shopify. пожалуйста, любой может ответить. просто как добавить скрипт скидки в тему debut по умолчанию без использования какого-либо приложения script editor. это скрипт для того, чтобы потратить X сумму и получить Y% скидку… Я получил этот скрипт ruby в Shopify.

   PRODUCT_DISCOUNT_TIERS = [
    {
   product_selector_match_type: :include,
   product_selector_type: :tag,
     product_selectors: ["your_tag"],
     tiers: [
       {
      quantity: 2,
    discount_type: :percent,
    discount_amount: 10,
    discount_message: '10% off for 2 ',
  },
  {
    quantity: 5,
    discount_type: :percent,
    discount_amount: 15,
    discount_message: '15% off for 5 ',
  },
],
  },
 ]
   class ProductSelector
    def initialize(match_type, selector_type, selectors)
    @match_type = match_type
    @comparator = match_type == :include ? 'any?' : 'none?'
    @selector_type = selector_type
    @selectors = selectors
   end

   def match?(line_item)
    if self.respond_to?(@selector_type)
      self.send(@selector_type, line_item)
    else
  raise RuntimeError.new('Invalid product selector type')
  end
end

  def tag(line_item)
   product_tags = line_item.variant.product.tags.map { |tag| tag.downcase.strip }
   @selectors = @selectors.map { |selector| selector.downcase.strip }
   (@selectors amp; product_tags).send(@comparator)
  end

   def type(line_item)
   @selectors = @selectors.map { |selector| selector.downcase.strip }
   (@match_type == :include) == @selectors.include? 
   (line_item.variant.product.product_type.downcase.strip)
  end

  def vendor(line_item)
@selectors = @selectors.map { |selector| selector.downcase.strip }
(@match_type == :include) == @selectors.include? 
 (line_item.variant.product.vendor.downcase.strip)
 end

 def product_id(line_item)
(@match_type == :include) == @selectors.include?(line_item.variant.product.id)
 end

 def variant_id(line_item)
(@match_type == :include) == @selectors.include?(line_item.variant.id)
 end

 def all(line_item)
  true
 end
  end
  class TieredPricingCampaign
    def initialize(campaigns)
    @campaigns = campaigns
   end

  def run(cart)
   @campaigns.each do |campaign|
  product_selector = ProductSelector.new(
    campaign[:product_selector_match_type],
    campaign[:product_selector_type],
    campaign[:product_selectors],
  )

  applicable_items = cart.line_items.select { |line_item| product_selector.match?(line_item) 
 }

  next if applicable_items.nil?

  total_applicable_quantity = applicable_items.map(amp;:quantity).reduce(0, : )
  tiers = campaign[:tiers].sort_by { |tier| tier[:quantity] }.reverse
  applicable_tier = tiers.find { |tier| tier[:quantity] <= total_applicable_quantity }

  next if applicable_tier.nil?

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

  applicable_items.each do |line_item|
    discount_applicator.apply(line_item)
  end
end
end
end

  CAMPAIGNS = [
  TieredPricingCampaign.new(PRODUCT_DISCOUNT_TIERS),
  ]

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

Output.cart = Input.cart
  

Возможно ли добавить скрипт без использования редактора сценариев и приложения Shopify plus. пожалуйста, кто-нибудь мне поможет.

Ответ №1:

Нет, вы должны использовать приложение Shopify Script.

Вы не можете писать скрипты ruby в коде темы, там разрешены только liquid и html / css / js.

Если вы хотите иметь автоматические скидки, загляните в раздел Автоматические скидки (у вас может быть одна активная) https://YOUR_STORE.myshopify.com/admin/discounts/automatic . Но вы не сможете достичь того, что вы описываете, с текущим набором условий скидок.

Комментарии:

1. спасибо @drip. и еще один вопрос. возможно ли написать код для многоуровневой скидки, потратив? используя js или другую технологию

2. Вы не можете создавать скидки с помощью JS. Но вы можете создавать многократные скидки для разных расходов и использовать liquid для добавления скрытого поля скидки, которое будет передано в кассу. Например, {% if cart.total_price > 1000 %}<input type="hidden" name="discount" value="1DOLAR_DISCOUNT" />{% endif %} это должно быть добавлено в форму корзины, чтобы оно работало, и у вас должна быть вызванная скидка 1DOLAR_DISCOUNT . Вы должны создать if/else if проверку для всех ваших уровней со всеми вашими скидками. (но они не могут быть динамическими на основе точной цены без Shopify scripts)

3. можете ли вы привести мне какой-либо пример liquid для этого

Ответ №2:

Исправьте, это невозможно без приложения script editor. Код выполняется в Shopify checkout, поэтому вы, к сожалению, не можете его вставить.