#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, поэтому вы, к сожалению, не можете его вставить.