行项脚本示例
行项目脚本影响购物车中的项目,并可以更改其属性和价格。这些脚本在每次更改购物车属性时运行,例如添加或删除商品、更改送货地址或添加折扣代码。
要使用此页面上的模板,请使用空白模板创建一个新脚本。
步骤:
- 从您的Shopify管理,到应用程序>脚本编辑器.
- 点击创建脚本.
- 点击行项目.
- 选择空白模板,然后点击创建脚本.
- 在Ruby源代码节,删除默认的代码行:<代码>输出。车=输入.车
- 从此页复制一个脚本并将其粘贴到Ruby源代码部分。
- 编辑可定制的设置部分,以便在您的商店中发挥作用。
- 测试你的脚本。更多信息请参考测试和调试Shopify脚本.
- 后测试:
- 点击保存草稿保存未发表的脚本草稿,或者
- 点击保存并发布创建并发布脚本。
在这一页
按消费分层推车折扣
使用此脚本提供美元金额折扣,该折扣根据购物车中商品的总价值增加。这个折扣尽可能均匀地分布在购物车中的各个项目上。
例如,如果顾客消费超过150美元,就给他们25美元的折扣,如果消费超过300美元,就给他们50美元的折扣,如果消费超过400美元,就给他们75美元的折扣。
# ================================ 可定制的设置 ================================# ================================================================按消费阈值分层购物车折扣##如果购物车总数大于(或等于)输入的# threshold,关联的折扣应用到购物车。的# discount将尽可能均匀地分布在所有物品上。## -“threshold”是获得资格所需的消费金额# - 'discount_amount'是应用于商品的美元折扣#车# - 'discount_message'是折扣时显示的消息#被应用# ================================================================SPENDING_THRESHOLDS=[{阈值:150,discount_amount:25,discount_message:“消费150美元可享25美元优惠!”,},{阈值:300,discount_amount:50,discount_message:“消费300美元,可享50美元优惠!”,},{阈值:400,discount_amount:75,discount_message:“消费400美元可享75美元优惠!”,},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# DollarDiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DollarDiscountApplicatordef初始化(discount_message)@discount_message=discount_message结束def应用(line_item,discount_amount)new_line_price=line_item.line_price-discount_amountline_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# TieredCartDiscountBySpendCampaign##如果购物车总数大于(或等于)输入的# threshold,关联的折扣应用到购物车。的# discount将尽可能均匀地分布在所有物品上。# ================================================================类TieredCartDiscountBySpendCampaigndef初始化(层)@tiers=层.sort_by{|层|层[:阈值]}。反向结束def运行(车)applicable_tier=@tiers.找到{|层|车.subtotal_price>=(钱.新(分:One hundred.)*层[:阈值])}返回如果applicable_tier.nil ?discount_applicator=DollarDiscountApplicator.新(applicable_tier[: discount_message])discount_amount=applicable_tier[: discount_amount]项目=车.line_items.sort_by{|line_item|line_item.变体.价格}自我.loop_items(车,项目,discount_amount,discount_applicator)结束defloop_items(车,line_items,discount_amount,discount_applicator)avg_discount=(discount_amount.to_f*(1/line_items.地图(&数量:).减少(0,:+)))。轮(2)avg_discount=钱.新(分:One hundred.)*avg_discountdiscount_amount=钱.新(分:One hundred.)*discount_amountline_items.each_with_index做|line_item,指数|打破如果discount_amount< =钱.零line_discount=avg_discount*line_item.数量如果discount_amount<line_discount||指数= =(line_items.大小-1)discount_update=line_item.line_price>discount_amount?discount_amount:line_item.line_price其他的discount_update=line_item.line_price>line_discount?line_discount:line_item.line_price结束discount_amount- =discount_updatediscount_applicator.应用(line_item,discount_update)结束结束结束活动=[TieredCartDiscountBySpendCampaign.新(SPENDING_THRESHOLDS),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
按消费分级折扣
使用此脚本提供百分比折扣,折扣根据购物车中商品的总价值增加。
例如,如果顾客消费30美元或以上,就给他们10%的折扣,如果消费50美元或以上,就给他们15%的折扣,如果消费100美元或以上,就给他们20%的折扣。
# ================================ 可定制的设置 ================================# ================================================================#按消费门槛分层折扣##如果购物车总数大于(或等于)输入的# threshold,关联的折扣应用于每个项目。## -“threshold”是获得资格所需的消费金额# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================SPENDING_THRESHOLDS=[{阈值:30.,discount_type:百分比,discount_amount:10,discount_message:“花30美元,打9折!”,},{阈值:50,discount_type:百分比,discount_amount:15,discount_message:“花50美元,打8折!”,},{阈值:One hundred.,discount_type:百分比,discount_amount:20.,discount_message:“花100美元,打8折!”,},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# TieredDiscountBySpendCampaign##如果购物车总数大于(或等于)输入的# threshold,关联的折扣应用于每个项目。# ================================================================类TieredDiscountBySpendCampaigndef初始化(层)@tiers=层.sort_by{|层|层[:阈值]}。反向结束def运行(车)applicable_tier=@tiers.找到{|层|车.subtotal_price>=(钱.新(分:One hundred.)*层[:阈值])}返回如果applicable_tier.nil ?discount_applicator=DiscountApplicator.新(applicable_tier[: discount_type],applicable_tier[: discount_amount],applicable_tier[: discount_message])车.line_items.每一个做|line_item|下一个如果line_item.变体.产品.gift_card吗?discount_applicator.应用(line_item)结束结束结束活动=[TieredDiscountBySpendCampaign.新(SPENDING_THRESHOLDS),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
按数量分层产品折扣
使用此脚本为特定产品提供批量折扣,折扣百分比根据购物车中这些产品的数量增加。
例如,如果顾客购买2顶或以上帽子,每顶帽子打9折;如果顾客购买5顶或以上帽子,每顶帽子打15折。
# ================================ 可定制的设置 ================================# ================================================================#按数量分层产品折扣##如果匹配项的总数量大于(或)#等于)输入的阈值,则相关折扣为#应用于每个匹配项。## - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(来自上面)#合格产品。产品/变体ID列表应该只#包含数字(即:没有引号)。如果使用':all',则此#也可以是'nil'。# - 'tiers'是一个层级列表,其中:# -“数量”是你需要购买的最小数量#合格# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================PRODUCT_DISCOUNT_TIERS=[{product_selector_match_type:包括,product_selector_type:标签,product_selectors:[“your_tag”],层:[{数量:2,discount_type:百分比,discount_amount:10,discount_message:“2人以上9折”,},{数量:5,discount_type:百分比,discount_amount:15,discount_message:“5人以上优惠15%”,},],},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# TieredProductDiscountByQuantityCampaign##如果匹配项的总数量大于(或)#等于)输入的阈值,则相关折扣为#应用于每个匹配项。# ================================================================类TieredProductDiscountByQuantityCampaigndef初始化(活动)@campaigns=活动结束def运行(车)@campaigns.每一个做|运动|product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors],)applicable_items=车.line_items.选择{|line_item|product_selector.比赛吗?(line_item)}下一个如果applicable_items.nil ?total_applicable_quantity=applicable_items.地图(&数量:).减少(0,:+)层=运动[:层]。sort_by{|层|层[数量:]}。反向applicable_tier=层.找到{|层|层[数量:]< =total_applicable_quantity}下一个如果applicable_tier.nil ?discount_applicator=DiscountApplicator.新(applicable_tier[: discount_type],applicable_tier[: discount_amount],applicable_tier[: discount_message])applicable_items.每一个做|line_item|discount_applicator.应用(line_item)结束结束结束结束活动=[TieredProductDiscountByQuantityCampaign.新(PRODUCT_DISCOUNT_TIERS),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
按产品消费分层产品折扣
使用此脚本提供百分比折扣,折扣根据购物车中特定商品的总价值增加。
例如,如果顾客消费30美元或以上,就给他们10%的折扣,如果消费50美元或以上,就给他们15%的折扣,如果消费100美元或以上,就给他们20%的折扣,但只针对与特定标签匹配的商品。
# ================================ 可定制的设置 ================================# ================================================================#按产品消费阈值分层产品折扣#如果在匹配项目上花费的总金额大于(或)#等于)输入的阈值,则相关折扣为#应用于每个匹配项。## - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该#只包含数字(即:没有引号)。如果使用':all',# this也可以是'nil'。# - 'tiers'是一个层级列表,其中:# -“threshold”是所需的最低金额#合格# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================PRODUCT_DISCOUNT_TIERS=[{product_selector_match_type:排除,product_selector_type:标签,product_selectors:[“your_tag”,“another_tag”],层:[{阈值:One hundred.,discount_type:百分比,discount_amount:10,discount_message:“满100美元可享9折优惠!”,},],},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# TieredProductDiscountByProductSpendCampaign#如果在匹配项目上花费的总金额大于(或)#等于)输入的阈值,则相关折扣为#应用于每个匹配项。# ================================================================类TieredProductDiscountByProductSpendCampaigndef初始化(活动)@campaigns=活动结束def运行(车)@campaigns.每一个做|运动|如果运动[: product_selector_type]= =:所有total_applicable_cost=车.subtotal_priceapplicable_items=车.line_items其他的product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors],)applicable_items=车.line_items.选择{|line_item|product_selector.比赛吗?(line_item)}下一个如果applicable_items.nil ?total_applicable_cost=applicable_items.地图(&: line_price).减少(钱.零,:+)结束层=运动[:层]。sort_by{|层|层[:阈值]}。反向applicable_tier=层.找到{|层|total_applicable_cost>=(钱.新(分:One hundred.)*层[:阈值])}下一个如果applicable_tier.nil ?discount_applicator=DiscountApplicator.新(applicable_tier[: discount_type],applicable_tier[: discount_amount],applicable_tier[: discount_message])applicable_items.每一个做|line_item|discount_applicator.应用(line_item)结束结束结束结束活动=[TieredProductDiscountByProductSpendCampaign.新(PRODUCT_DISCOUNT_TIERS),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
产品折扣
使用此脚本提供特定项目的折扣。
例如,给顾客打上标签的商品打九折<代码>折扣.
# ================================ 可定制的设置 ================================# ================================================================#按产品打折##任何匹配的商品将按输入的金额打折。## - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该#只包含数字(即:没有引号)。如果使用':all',# this也可以是'nil'。# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================PRODUCT_DISCOUNTS=[{product_selector_match_type:包括,product_selector_type:标签,product_selectors:[“your_tag”],discount_type:百分比,discount_amount:10,discount_message:“贴有标签的产品打九折!”}]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# ProductDiscountCampaign##任何匹配的商品将按输入的金额打折。# ================================================================类ProductDiscountCampaigndef初始化(活动)@campaigns=活动结束def运行(车)@campaigns.每一个做|运动|product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors],)discount_applicator=DiscountApplicator.新(运动[: discount_type],运动[: discount_amount],运动[: discount_message])车.line_items.每一个做|line_item|下一个除非product_selector.比赛吗?(line_item)discount_applicator.应用(line_item)结束结束结束结束活动=[ProductDiscountCampaign.新(PRODUCT_DISCOUNTS),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
产品折扣按折扣代码
如果使用特定的折扣代码,则使用此脚本提供特定项目的折扣。
例如,给顾客打上标签的商品打九折<代码>折扣如果他们使用折扣代码<代码>DISCOUNT_10.
# ================================ 可定制的设置 ================================# ================================================================#产品折扣折扣代码##如果使用任何匹配的折扣代码,任何匹配的项目#将按输入的金额打折扣。## - 'discount_code_match_type'决定是否如下# strings应该是完全匹配或部分匹配。可以是:# - ':exact'表示精确匹配# - ':partial'表示部分匹配# - 'discount_codes'是标识折扣的字符串列表#代码# - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该#只包含数字(即:没有引号)。如果使用':all',# this也可以是'nil'。# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================PRODUCT_DISCOUNTS_BY_DISCOUNT_CODE=[{discount_code_match_type:精确,discount_codes:[“TESTCODE1”,“TESTCODE2”],product_selector_match_type:包括,product_selector_type:标签,product_selectors:[“your_tag”],discount_type:百分比,discount_amount:10,discount_message:“贴有标签的产品打九折!”}]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# DiscountCodeSelector#查找所提供的折扣代码是否与#输入代码。# ================================================================类DiscountCodeSelectordef初始化(match_type,discount_codes)@comparator=match_type= =:确切?“= =”:“有吗?”@discount_codes=discount_codes.地图{|discount_code|discount_code.upcase.带}结束def比赛吗?(discount_code)@discount_codes.任何?{|代码|discount_code.代码.upcase.发送(@comparator,代码)}结束结束# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# ProductDiscountByCodeCampaign##如果使用任何匹配的折扣代码,任何匹配的项目#将按输入的金额打折扣。# ================================================================类ProductDiscountByCodeCampaigndef初始化(活动)@campaigns=活动结束def运行(车)返回如果车.discount_code.nil ?@campaigns.每一个做|运动|discount_code_selector=DiscountCodeSelector.新(运动[: discount_code_match_type],运动[: discount_codes])下一个除非discount_code_selector.比赛吗?(车.discount_code)product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors],)discount_applicator=DiscountApplicator.新(运动[: discount_type],运动[: discount_amount],运动[: discount_message])车.line_items.每一个做|line_item|下一个除非product_selector.比赛吗?(line_item)discount_applicator.应用(line_item)结束结束结束结束活动=[ProductDiscountByCodeCampaign.新(PRODUCT_DISCOUNTS_BY_DISCOUNT_CODE),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
购买特定数量的产品,获得第二数量的折扣
如果购买数量超过一定数量,使用此脚本提供特定项目的折扣。
例如,让顾客购买三种带有标签的商品<代码>折扣第四件有标签的商品可享五折优惠<代码>折扣.
# ================================ 可定制的设置 ================================# ================================================================#买X,买Y,换Z折扣##购买一定数量的匹配物品,获得一定数量的物品#个相同的匹配项目,并应用了输入的折扣。为#的例子:##“买两件带有标签的产品,再买另一件#标签“标签”为九折优惠## - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(来自上面)#合格产品。产品/变体ID列表应该只#包含数字(即:没有引号)。如果使用':all',则此#也可以是'nil'。# - 'quantity_to_buy'是需要购买的产品数量#合格# - 'quantity_to_discount'是要折扣的产品数量# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用##在运行多个报价的情况下需要注意的是产品选择之间不应该有任何重叠因为这会导致额外的折扣。例如,你应该#不要提供“买1件X产品,打5折”和“买2件”#产品X,送1件”# ================================================================BUY_X_GET_Y_FOR_Z=[{product_selector_match_type:包括,product_selector_type::,product_selectors:零,quantity_to_buy:1,quantity_to_discount:1,discount_type:百分比,discount_amount:50,discount_message:“买一件,第二件五折!”,},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# BuyXGetYForZCampaign##购买一定数量的匹配物品,获得一定数量的物品#个相同的匹配项目,并应用了输入的折扣。# ================================================================类BuyXGetYForZCampaigndef初始化(活动)@campaigns=活动结束def运行(车)@campaigns.每一个做|运动|product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors],)eligible_items=车.line_items.选择{|line_item|product_selector.比赛吗?(line_item)}下一个如果eligible_items.nil ?eligible_items=eligible_items.sort_by{|line_item|-line_item.变体.价格}quantity_to_buy=运动[: quantity_to_buy]quantity_to_discount=运动[: quantity_to_discount]bundle_size=quantity_to_buy+quantity_to_discountnumber_of_bundles=(eligible_items.地图(&数量:).减少(0,:+)/bundle_size).地板上number_of_discountable_items=number_of_bundles*quantity_to_discount下一个除非number_of_discountable_items>0discount_applicator=DiscountApplicator.新(运动[: discount_type],运动[: discount_amount],运动[: discount_message])自我.loop_items(discount_applicator,车,eligible_items,number_of_discountable_items,quantity_to_buy,quantity_to_discount)结束结束defloop_items(discount_applicator,车,line_items,num_to_discount,quantity_to_buy,quantity_to_discount)盈余=0bundle_size=quantity_to_buy+quantity_to_discountline_items.每一个做|line_item|line_quantity=line_item.数量+盈余如果line_quantity>quantity_to_buybundles_per_line=(line_quantity/bundle_size).地板上take_quantity=bundles_per_line*quantity_to_discount盈余+ =(line_quantity-(bundle_size*bundles_per_line))如果line_item.数量>take_quantitydiscount_item=line_item.分裂(花:take_quantity)discount_applicator.应用(discount_item)位置=车.line_items.find_index(line_item)车.line_items.插入(位置+1,discount_item)num_to_discount- =take_quantity其他的discount_applicator.应用(line_item)num_to_discount- =line_item.数量结束其他的盈余+ =line_quantity结束打破如果num_to_discount< =0结束结束结束活动=[BuyXGetYForZCampaign.新(BUY_X_GET_Y_FOR_Z),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
买一个捆绑包,在折扣的时候得到一个额外的产品
使用这个脚本提供一个特定的项目折扣,如果他们已经购买了许多其他项目。
例如,如果顾客同时购买一顶帽子、一件t恤和一副太阳镜,就免费赠送一双袜子。
# ================================ 可定制的设置 ================================# ================================================================#购买产品VWX,以Z折扣获得产品Y##购买一组特定的商品,再以折扣价获得另一件商品。#例如:##“买一件t恤、一顶帽子和一副太阳镜,免费获得一双袜子”## - 'bundle_items'是包含bundle的项列表# bundle,其中:# - 'product_id'是产品的ID# - 'quantity_needed'是完成所需的数量#捆绑包# - 'quantity_to_buy'是获得资格所需的捆绑包数量对于折扣产品# - 'discount_product_selector_match_type'决定我们是否查找与输入内容匹配或不匹配的产品#选择器。可以是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'discount_product_selector_type'决定如何符合条件#产品将被识别。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'discount_product_selectors'是一个标识符列表(from(如上#),以确保产品合格。产品/变体ID列表#应该只包含数字(例如:没有引号)。如果':all'是#也可以是'nil'。# - 'quantity_to_discount'是要折扣的商品数量每次报价# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================BUNDLE_DISCOUNTS=[{bundle_items:[{product_id:1234567890987,quantity_needed:1},{product_id:1234567890986,quantity_needed:1},],quantity_to_buy:1,discount_product_selector_match_type:包括,discount_product_selector_type: product_id,discount_product_selectors:[1234567890123],quantity_to_discount:1,discount_type:百分比,discount_amount:10,discount_message:“购买VWX产品,获得Y产品九折优惠”,},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# BundleSelector#查找属于输入包的任何项目并保存#。# ================================================================类BundleSelectordef初始化(bundle_items)@bundle_items=bundle_items.减少({})做|acc,bundle_item|acc[bundle_item[: product_id]]={cart_items:[],quantity_needed:bundle_item[: quantity_needed],total_quantity:0,}acc结束结束def构建(车)车.line_items.每一个做|line_item|下一个除非@bundle_items[line_item.变体.产品.id]@bundle_items[line_item.变体.产品.id] [: cart_items]。推(line_item)@bundle_items[line_item.变体.产品.id] [: total_quantity]+ =line_item.数量结束@bundle_items结束结束# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# DiscountLoop#循环遍历所提供的行项目并对所提供的项目进行折扣按提供折扣的商品数量。# ================================================================类DiscountLoopdef初始化(discount_applicator)@discount_applicator=discount_applicator结束defloop_items(车,line_items,num_to_discount)line_items.each_with_index做|line_item|打破如果num_to_discount< =0如果line_item.数量>num_to_discountsplit_line_item=line_item.分裂(花:num_to_discount)@discount_applicator.应用(split_line_item)位置=车.line_items.find_index(line_item)车.line_items.插入(位置+1,split_line_item)打破其他的@discount_applicator.应用(line_item)num_to_discount- =line_item.数量结束结束结束结束# ================================================================# BundleDiscountCampaign##如果输入的捆绑包存在,则输入的折扣为#适用于输入的产品。# ================================================================类BundleDiscountCampaigndef初始化(活动)@campaigns=活动结束def运行(车)@campaigns.每一个做|运动|bundle_selector=BundleSelector.新(运动[: bundle_items])bundle_items=bundle_selector.构建(车)下一个如果bundle_items.任何?做|product_id,product_info|product_info[: total_quantity]<product_info[: quantity_needed]结束num_bundles=bundle_items.地图做|product_id,product_info|(product_info[: total_quantity]/product_info[: quantity_needed])结束num_bundles=num_bundles.最小值.地板上product_selector=ProductSelector.新(运动[: discount_product_selector_match_type],运动[: discount_product_selector_type],运动[: discount_product_selectors],)discount_items=车.line_items.选择{|line_item|product_selector.比赛吗?(line_item)}下一个如果discount_items.nil ?discount_applicator=DiscountApplicator.新(运动[: discount_type],运动[: discount_amount],运动[: discount_message])discount_loop=DiscountLoop.新(discount_applicator)discount_loop.loop_items(车,discount_items,(运动[: quantity_to_discount]*num_bundles))结束结束结束活动=[BundleDiscountCampaign.新(BUNDLE_DISCOUNTS),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
包的折扣
使用此脚本在将一组特定产品添加到购物车时提供折扣。
例如,为购买一件t恤、一顶帽子和一副太阳镜的顾客提供八折优惠。
# ================================ 可定制的设置 ================================# ================================================================#购买产品WXY,获得Z折扣##购买一组特定的产品,在a#折扣。例如:##“买一件t恤、一顶帽子和一副太阳镜,各打八折”## - 'bundle_items'是包含bundle的项列表# bundle,其中:# - 'product_id'是产品的ID# - 'quantity_needed'是完成所需的数量#捆绑包# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================BUNDLE_DISCOUNTS=[{bundle_items:[{product_id:1234567890987,quantity_needed:1},{product_id:1234567890986,quantity_needed:1},],discount_type:百分比,discount_amount:10,discount_message:“购买产品X和产品Y,打九折!”,},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# BundleSelector#查找属于输入包的任何项目并保存#。# ================================================================类BundleSelectordef初始化(bundle_items)@bundle_items=bundle_items.减少({})做|acc,bundle_item|acc[bundle_item[: product_id]]={cart_items:[],quantity_needed:bundle_item[: quantity_needed],total_quantity:0,}acc结束结束def构建(车)车.line_items.每一个做|line_item|下一个如果line_item.line_price_changed吗?下一个除非@bundle_items[line_item.变体.产品.id]@bundle_items[line_item.变体.产品.id] [: cart_items]。推(line_item)@bundle_items[line_item.变体.产品.id] [: total_quantity]+ =line_item.数量结束@bundle_items结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# DiscountLoop#循环遍历所提供的行项目并对所提供的项目进行折扣按提供折扣的商品数量。# ================================================================类DiscountLoopdef初始化(discount_applicator)@discount_applicator=discount_applicator结束defloop_items(车,line_items,num_to_discount)line_items.each_with_index做|line_item|打破如果num_to_discount< =0如果line_item.数量>num_to_discountsplit_line_item=line_item.分裂(花:num_to_discount)@discount_applicator.应用(split_line_item)位置=车.line_items.find_index(line_item)车.line_items.插入(位置+1,split_line_item)打破其他的@discount_applicator.应用(line_item)num_to_discount- =line_item.数量结束结束结束结束# ================================================================# BundleDiscountCampaign##如果输入的捆绑包存在,则输入的折扣为#应用于bundle中的每个项目。# ================================================================类BundleDiscountCampaigndef初始化(活动)@campaigns=活动结束def运行(车)@campaigns.每一个做|运动|bundle_selector=BundleSelector.新(运动[: bundle_items])bundle_items=bundle_selector.构建(车)下一个如果bundle_items.任何?做|product_id,product_info|product_info[: total_quantity]<product_info[: quantity_needed]结束num_bundles=bundle_items.地图做|product_id,product_info|(product_info[: total_quantity]/product_info[: quantity_needed])结束num_bundles=num_bundles.最小值.地板上discount_applicator=DiscountApplicator.新(运动[: discount_type],运动[: discount_amount],运动[: discount_message])discount_loop=DiscountLoop.新(discount_applicator)bundle_items.每一个做|product_id,product_info|discount_loop.loop_items(车,product_info[: cart_items],(product_info[: quantity_needed]*num_bundles),)结束结束结束结束活动=[BundleDiscountCampaign.新(BUNDLE_DISCOUNTS),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
买一送一的优惠
使用此脚本,当客户购买一定数量的不同产品时,提供商品的百分比折扣。
例如,如果顾客购买两件t恤,就给他们一顶帽子打九折。
# ================================ 可定制的设置 ================================# ================================================================#购买产品W的V,以Z折扣获得产品Y的X##购买一定数量的匹配物品,获得一定数量的#与输入折扣相匹配的另一组商品#应用。例如:##“买两件t恤,打九折送一顶帽子”## - 'buy_product_selector_match_type'决定我们是否查看#表示与输入的选择器匹配或不匹配的产品。#可以是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'buy_product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'buy_product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该只#包含数字(即:没有引号)。如果使用':all',则此#也可以是'nil'。# - 'quantity_to_buy'是需要购买的产品数量#合格# - 'get_selector_match_type'与' Buy '相同#以上版本# - 'get_product_selector_type'和' Buy '的意思是一样的#以上版本# - 'get_product_selectors'与' Buy '相同#以上版本# - 'quantity_to_discount'是要折扣的产品数量# - 'allow_incomplete_bundle'决定是否使用#要打折的商品可以打折,也可以全部打折#需要出席。可以是:# -“真”# -“false”# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================BUYVOFW_GETXOFY_FORZ=[{buy_product_selector_match_type:包括,buy_product_selector_type:标签,buy_product_selectors:[“your_tag”,“another_tag”],quantity_to_buy:1,get_product_selector_match_type:包括,get_product_selector_type:标签,get_product_selectors:[“your_other_tag”,“a_different_tag”],quantity_to_discount:1,allow_incomplete_bundle:假,discount_type:百分比,discount_amount:One hundred.,discount_message:“买X产品,免费送Y产品!”,},{buy_product_selector_match_type:包括,buy_product_selector_type: product_id,buy_product_selectors:[1234567890987,1234567890986],quantity_to_buy:1,get_product_selector_match_type:包括,get_product_selector_type: product_id,get_product_selectors:[1234567890985,1234567890984],quantity_to_discount:1,allow_incomplete_bundle:假,discount_type:美元,discount_amount:10,discount_message:“买X产品,Y产品减价10美元!”,},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# DiscountLoop#循环遍历所提供的行项目并对所提供的项目进行折扣按提供折扣的商品数量。# ================================================================类DiscountLoopdef初始化(discount_applicator)@discount_applicator=discount_applicator结束defloop_items(车,line_items,num_to_discount)line_items.每一个做|line_item|打破如果num_to_discount< =0如果line_item.数量>num_to_discountsplit_line_item=line_item.分裂(花:num_to_discount)@discount_applicator.应用(split_line_item)位置=车.line_items.find_index(line_item)车.line_items.插入(位置+1,split_line_item)打破其他的@discount_applicator.应用(line_item)num_to_discount- =line_item.数量结束结束结束结束# ================================================================# BuyVofWGetXofYForZCampaign##购买一定数量的匹配物品,获得一定数量的#与输入折扣相匹配的另一组商品#应用。# ================================================================类BuyVofWGetXofYForZCampaigndef初始化(活动)@campaigns=活动结束def运行(车)@campaigns.每一个做|运动|buy_product_selector=ProductSelector.新(运动[: buy_product_selector_match_type],运动[: buy_product_selector_type],运动[: buy_product_selectors],)get_product_selector=ProductSelector.新(运动[: get_product_selector_match_type],运动[: get_product_selector_type],运动[: get_product_selectors],)buy_items=[]get_item=[]车.line_items.每一个做|line_item|buy_items.推(line_item)如果buy_product_selector.比赛吗?(line_item)get_item.推(line_item)如果get_product_selector.比赛吗?(line_item)结束下一个如果buy_items.空的吗?||get_item.空的吗?get_item=get_item.sort_by{|line_item|line_item.变体.价格}quantity_to_buy=运动[: quantity_to_buy]quantity_to_discount=运动[: quantity_to_discount]buy_offers=(buy_items.地图(&数量:).减少(0,:+)/quantity_to_buy).地板上如果运动[: allow_incomplete_bundle]number_of_bundles=buy_offers其他的get_offers=(get_item.地图(&数量:).减少(0,:+)/quantity_to_discount).地板上number_of_bundles=[buy_offers,get_offers]。最小值结束number_of_discountable_items=number_of_bundles*quantity_to_discount下一个除非number_of_discountable_items>0discount_applicator=DiscountApplicator.新(运动[: discount_type],运动[: discount_amount],运动[: discount_message])discount_loop=DiscountLoop.新(discount_applicator)discount_loop.loop_items(车,get_item,number_of_discountable_items)结束结束结束活动=[BuyVofWGetXofYForZCampaign.新(BUYVOFW_GETXOFY_FORZ),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
以特定的金额购买特定数量的产品
使用此脚本以选定的价格提供多个产品。
例如,为顾客提供2件t恤,售价20美元。
# ================================ 可定制的设置 ================================# ================================================================#以$Z购买产品Y的X##以特定价格购买一定数量的匹配物品。#例如:##“花20美元买两件t恤”## - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该#只包含数字(即:没有引号)。如果使用':all',# this也可以是'nil'。# - 'quantity_to_buy'是需要购买的产品数量#合格# - 'final_price '是所有产品的收费金额#是报价的一部分# - 'discount_message'是折扣时显示的消息#被应用# ================================================================BUY_X_GET_Y_FOR_Z=[{product_selector_match_type:包括,product_selector_type:标签,product_selectors:[“your_tag”],quantity_to_buy:2,final_price:One hundred.,discount_message:“20美元买2个”,},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DollarDiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DollarDiscountApplicatordef初始化(discount_message)@discount_message=discount_message结束def应用(line_item,discount_amount)new_line_price=line_item.line_price-discount_amountline_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# BuyXOfYForZCampaign##以特定价格购买一定数量的匹配物品。# ================================================================类BuyXOfYForZCampaigndef初始化(活动)@campaigns=活动结束def运行(车)@campaigns.每一个做|运动|product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors],)eligible_items=车.line_items.选择{|line_item|product_selector.比赛吗?(line_item)}下一个如果eligible_items.nil ?eligible_item_count=eligible_items.地图(&数量:).减少(0,:+)quantity_to_buy=运动[: quantity_to_buy]number_of_offers=(eligible_item_count/quantity_to_buy).地板上下一个除非number_of_offers>0number_of_discountable_items=number_of_offers*quantity_to_buytotal_offer_price=钱.新(分:One hundred.)*(number_of_offers*运动[: final_price])discount_applicator=DollarDiscountApplicator.新(运动[: discount_message])自我.loop_items(车,eligible_items,number_of_discountable_items,total_offer_price,discount_applicator)结束结束defloop_items(车,line_items,num_to_discount,total_price,discount_applicator)current_price=钱.零avg_price=total_price*(1/num_to_discount)line_items=line_items.sort_by{|line_item|line_item.变体.价格}line_items.每一个做|line_item|打破如果num_to_discount< =0如果line_item.数量>num_to_discountsplit_line_item=line_item.分裂(花:num_to_discount)discount_amount=split_line_item.line_price-(total_price-current_price)discount_applicator.应用(split_line_item,discount_amount)位置=车.line_items.find_index(line_item)车.line_items.插入(位置+1,split_line_item)打破elsifline_item.数量= =num_to_discountdiscount_amount=line_item.line_price-(total_price-current_price)discount_applicator.应用(line_item,discount_amount)打破其他的如果line_item.变体.价格< =avg_pricecurrent_price+ =line_item.line_price其他的discount_amount=(line_item.变体.价格-avg_price)*line_item.数量current_price+ =(line_item.line_price-discount_amount)discount_applicator.应用(line_item,discount_amount)结束num_to_discount- =line_item.数量结束结束结束结束活动=[BuyXOfYForZCampaign.新(BUY_X_GET_Y_FOR_Z),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
购买赠送礼品
如果购物车总额大于某一金额,则使用此脚本提供特定产品的折扣。
例如,如果顾客消费超过75美元,就提供一份免费礼物。
# ================================ 可定制的设置 ================================# ================================================================花费$X,以$ Z折扣获得产品Y##如果购物车的总额大于(或等于)输入的# threshold(减去折扣金额),输入的数量#匹配项目按输入的金额打折。## - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该#只包含数字(即:没有引号)。如果使用':all',# this也可以是'nil'。# -“门槛”是获得资格所需花费的金额# - 'quantity_to_discount'是要折扣的商品数量#如果合格# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================SPENDX_GETY_FORZ=[{product_selector_match_type:包括,product_selector_type: product_id,product_selectors:[1234567890123],阈值:75,quantity_to_discount:1,discount_type:百分比,discount_amount:One hundred.,discount_message:“花75美元或以上,就可以免费获得X产品!”,},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# DiscountLoop#循环遍历所提供的行项目并对所提供的项目进行折扣按提供折扣的商品数量。# ================================================================类DiscountLoopdef初始化(discount_applicator)@discount_applicator=discount_applicator结束defloop_items(车,line_items,num_to_discount)line_items.每一个做|line_item|打破如果num_to_discount< =0如果line_item.数量>num_to_discountsplit_line_item=line_item.分裂(花:num_to_discount)@discount_applicator.应用(split_line_item)位置=车.line_items.find_index(line_item)车.line_items.插入(位置+1,split_line_item)打破其他的@discount_applicator.应用(line_item)num_to_discount- =line_item.数量结束结束结束结束# ================================================================# SpendXGetYForZCampaign##如果购物车的总额大于(或等于)输入的# threshold(减去折扣金额),输入的数量#匹配项目按输入的金额打折。# ================================================================类SpendXGetYForZCampaigndef初始化(活动)@campaigns=活动结束def运行(车)@campaigns.每一个做|运动|阈值=钱.新(分:One hundred.)*运动[:阈值]下一个如果车.subtotal_price<阈值product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors],)eligible_items=车.line_items.选择{|line_item|product_selector.比赛吗?(line_item)}下一个如果eligible_items.nil ?eligible_items=eligible_items.sort_by{|line_item|line_item.变体.价格}num_to_discount=运动[: quantity_to_discount]cart_total=车.subtotal_priceeligible_items.每一个做|line_item|打破如果num_to_discount< =0如果line_item.数量>num_to_discountcart_total- =line_item.变体.价格*num_to_discount打破其他的cart_total- =line_item.line_pricenum_to_discount- =line_item.数量结束结束下一个如果cart_total<阈值discount_applicator=discount_applicator=DiscountApplicator.新(运动[: discount_type],运动[: discount_amount],运动[: discount_message])discount_loop=DiscountLoop.新(discount_applicator)discount_loop.loop_items(车,eligible_items,运动[: quantity_to_discount])结束结束结束活动=[SpendXGetYForZCampaign.新(SPENDX_GETY_FORZ),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
产品折扣按客户标签
使用此脚本为带有特定标签的客户提供特定产品的折扣。
例如,提供20%的折扣,如果客户有<代码>贵宾标签。
# ================================ 可定制的设置 ================================# ================================================================#按客户标签的产品折扣##如果我们有一个匹配的客户(通过标签),输入的折扣#将应用于任何匹配项。## - 'customer_tag_match_type'决定是否查找客户#是否被任何输入的标签所标记。可以是:# - ':include'检查客户是否被标记# - ':exclude'确保客户没有被标记# - 'customer_tags'是标识合格的标签列表#客户# - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该#只包含数字(即:没有引号)。如果使用':all',# this也可以是'nil'。# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================DISCOUNTS_FOR_CUSTOMER_TAG=[{customer_tag_match_type:包括,customer_tags:[“贵宾”],product_selector_match_type:包括,product_selector_type::,product_selectors:零,discount_type:百分比,discount_amount:20.,discount_message:“VIP客户优惠!”,},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# CustomerTagSelector#查找所提供的客户是否有任何输入的标签。# ================================================================类CustomerTagSelectordef初始化(match_type,标签)@comparator=match_type= =:包括?“什么?”:“没有吗?”@ tags=标签.地图{|标签|标签.downcase.带}结束def比赛吗?(客户)customer_tags=客户.标签.地图{|标签|标签.downcase.带}(@ tags&customer_tags).发送(@comparator)结束结束# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# DiscountForCustomerTagCampaign##如果我们有一个匹配的客户(通过标签),输入的折扣#应用于任何匹配项。# ================================================================类DiscountForCustomerTagCampaigndef初始化(活动)@campaigns=活动结束def运行(车)返回除非车.客户&.标签@campaigns.每一个做|运动|customer_tag_selector=CustomerTagSelector.新(运动[: customer_tag_match_type],运动[: customer_tags])下一个除非customer_tag_selector.比赛吗?(车.客户)product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors])discount_applicator=DiscountApplicator.新(运动[: discount_type],运动[: discount_amount],运动[: discount_message])车.line_items.每一个做|line_item|下一个除非product_selector.比赛吗?(line_item)discount_applicator.应用(line_item)结束结束结束结束活动=[DiscountForCustomerTagCampaign.新(DISCOUNTS_FOR_CUSTOMER_TAG),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
产品折扣由客户营销ob欧宝娱乐app下载地址
使用此脚本向接受营销的客户提供特定产品的折扣。ob欧宝娱乐app下载地址
例如,为任何接受营销的客户提供所有产品的10%折扣。ob欧宝娱乐app下载地址
# ================================ 可定制的设置 ================================# ================================================================#客户营销的产品折扣ob欧宝娱乐app下载地址##如果客户接受营销,任何匹配的项目都是ob欧宝娱乐app下载地址#按输入金额贴现。## - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该#只包含数字(即:没有引号)。如果使用':all',# this也可以是'nil'。# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================PRODUCT_DISCOUNTS_BY_CUSTOMER_ob欧宝娱乐app下载地址MARKETING=[{product_selector_match_type:包括,product_selector_type::,product_selectors:零,discount_type:百分比,discount_amount:10,discount_message:“订阅客户享九折优惠!”}]# ================================ 脚本代码(不要编辑 ) ===============================# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# ProductDiscountByCustomerob欧宝娱乐app下载地址MarketingCampaign##如果客户接受营销,任何匹配的项目都是ob欧宝娱乐app下载地址#按输入金额贴现。# ================================================================类ProductDiscountByCustomerob欧宝娱乐app下载地址MarketingCampaigndef初始化(活动)@campaigns=活动结束def运行(车)返回如果车.客户.nil ?@campaigns.每一个做|运动|下一个除非车.客户.accepts_ob欧宝娱乐app下载地址marketing吗?product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors])discount_applicator=DiscountApplicator.新(运动[: discount_type],运动[: discount_amount],运动[: discount_message])车.line_items.每一个做|line_item|下一个除非product_selector.比赛吗?(line_item)discount_applicator.应用(line_item)结束结束结束结束活动=[ProductDiscountByCustomerob欧宝娱乐app下载地址MarketingCampaign.新(PRODUCT_DISCOUNTS_BY_CUSTOMER_ob欧宝娱乐app下载地址MARKETING),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
产品折扣的客户订单数量
使用此脚本为具有特定订单数量的客户提供特定产品的折扣。
例如,为没有订单的客户提供10%的折扣。
# ================================ 可定制的设置 ================================# ================================================================#产品折扣按订单数量##如果客户已经下了匹配数量的订单,任何匹配项目按输入的金额打折。## - 'order_count_match_type'决定我们如何比较客户的订单数量达到输入的限制。可以是:# - ':greater_than'确保客户的订单数量#大于输入的限制# - ':greater_than_equal'确保客户的订单# count大于或等于输入的限制# - ':less_than'确保客户的订单数量为#小于输入的限制# - ':less_than_equal'确保客户的订单# count小于或等于输入的限制# - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该#只包含数字(即:没有引号)。如果使用':all',# this也可以是'nil'。# - 'discount_type'是要提供的折扣类型。可以#:# - ':percent'# - ':美元'# - 'discount_amount'是折扣的百分比/美元#应用(每项)# - 'discount_message'是折扣时显示的消息#被应用# ================================================================PRODUCT_DISCOUNTS_BY_ORDER_COUNT=[{order_count_match_type: less_than,order_count_limit:1,product_selector_match_type:包括,product_selector_type::,product_selectors:零,discount_type:百分比,discount_amount:10,discount_message:“首次购房者打九折!”}]# ================================ 脚本代码(不要编辑 ) ===============================# ================================================================# OrderCountSelector#查找客户是否已经下了一定数量的订单# ================================================================类OrderCountSelectordef初始化(match_type,限制)@match_type=match_type@limit=限制结束def比赛吗?(客户)如果自我.respond_to吗?(@match_type)自我.发送(@match_type,客户,@limit)其他的提高RuntimeError.新(“无效的订单计数匹配类型”)结束结束defgreater_than(客户,限制)客户.orders_count>限制结束defgreater_than_equal(客户,限制)客户.orders_count>=限制结束defless_than(客户,限制)客户.orders_count<限制结束defless_than_equal(客户,限制)客户.orders_count< =限制结束结束# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DiscountApplicator##将输入的折扣应用于提供的行项目。# ================================================================类DiscountApplicatordef初始化(discount_type,discount_amount,discount_message)@discount_type=discount_type@discount_message=discount_message@discount_amount=如果discount_type= =: %1-(discount_amount*0.01)其他的钱.新(分:One hundred.)*discount_amount结束结束def应用(line_item)new_line_price=如果@discount_type= =: %line_item.line_price*@discount_amount其他的[line_item.line_price-(@discount_amount*line_item.数量),钱.零]。马克斯结束line_item.change_line_price(new_line_price,信息:@discount_message)结束结束# ================================================================# ProductDiscountByOrderCountCampaign##如果客户已经下了匹配数量的订单,任何匹配项目按输入的金额打折。# ================================================================类ProductDiscountByOrderCountCampaigndef初始化(活动)@campaigns=活动结束def运行(车)返回如果车.客户.nil ?@campaigns.每一个做|运动|order_count_selector=OrderCountSelector.新(运动[: order_count_match_type],运动[: order_count_limit])下一个除非order_count_selector.比赛吗?(车.客户)product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors])discount_applicator=DiscountApplicator.新(运动[: discount_type],运动[: discount_amount],运动[: discount_message])车.line_items.每一个做|line_item|下一个除非product_selector.比赛吗?(line_item)discount_applicator.应用(line_item)结束结束结束结束活动=[ProductDiscountByOrderCountCampaign.新(PRODUCT_DISCOUNTS_BY_ORDER_COUNT),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
禁用折扣代码
使用此脚本在结帐过程中禁用折扣代码。
例如,在你的商店进行促销时,防止顾客使用折扣代码。
# ================================ 可定制的设置 ================================# ================================================================#禁用折扣码使用##任何折扣码将被拒绝与输入的消息。## - 'REJECTION_MESSAGE'是折扣时显示的消息# code被拒绝# ================================================================REJECTION_MESSAGE=“折扣代码不能在此促销期间使用”# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# DisableDiscountCodesCampaign##任何折扣码将被拒绝与输入的消息。# ================================================================类DisableDiscountCodesCampaigndef初始化(rejection_message)@rejection_message=rejection_message结束def运行(车)返回如果车.discount_code.nil ?车.discount_code.拒绝(信息:@rejection_message)结束结束活动=[DisableDiscountCodesCampaign.新(REJECTION_MESSAGE),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
禁用产品的折扣代码
如果购物车中有特定的产品,可以使用此脚本在结帐过程中禁用折扣代码。
例如,防止客户使用折扣码,如果产品标有<代码>折扣在购物车里。
# ================================ 可定制的设置 ================================# ================================================================#禁用产品折扣代码##如果使用了任何匹配的折扣代码,以及任何匹配的项目#是在购物车中,折扣代码被拒绝与输入#消息。## - 'discount_code_match_type'决定是否如下# strings应该是完全匹配或部分匹配。可以是:# - ':exact'表示精确匹配# - ':partial'表示部分匹配# - 'discount_codes'是标识折扣的字符串列表#代码# - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该#只包含数字(即:没有引号)。如果使用':all',# this也可以是'nil'。# - 'rejection_message'是折扣时显示的消息# code被拒绝# ================================================================REJECT_DISCOUNT_CODE_FOR_PRODUCTS=[{discount_code_match_type:精确,discount_codes:[“TESTCODE1”,“TESTCODE2”],product_selector_match_type:包括,product_selector_type:标签,product_selectors:[“折扣”],rejection_message:"折扣代码不能用于'打折'产品"}]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# DiscountCodeSelector#查找所提供的折扣代码是否与#输入代码。# ================================================================类DiscountCodeSelectordef初始化(match_type,discount_codes)@comparator=match_type= =:确切?“= =”:“有吗?”@discount_codes=discount_codes.地图{|discount_code|discount_code.upcase.带}结束def比赛吗?(discount_code)@discount_codes.任何?{|代码|discount_code.代码.upcase.发送(@comparator,代码)}结束结束# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# DisableDiscountCodesForProductsCampaign##如果使用了任何匹配的折扣代码,以及任何匹配的项目#是在购物车中,折扣代码被拒绝与输入#消息。# ================================================================类DisableDiscountCodesForProductsCampaigndef初始化(活动)@campaigns=活动结束def运行(车)返回如果车.discount_code.nil ?@campaigns.每一个做|运动|discount_code_selector=DiscountCodeSelector.新(运动[: discount_code_match_type],运动[: discount_codes])下一个除非discount_code_selector.比赛吗?(车.discount_code)product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors],)下一个除非车.line_items.任何?{|line_item|product_selector.比赛吗?(line_item)}车.discount_code.拒绝(信息:运动[: rejection_message])结束结束结束活动=[DisableDiscountCodesForProductsCampaign.新(REJECT_DISCOUNT_CODE_FOR_PRODUCTS),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车
限制产品数量
使用此脚本对特定产品应用数量限制。
例如,防止客户在单个订单中购买超过1个“产品X”。
# ================================ 可定制的设置 ================================# ================================================================#产品数量限制##如果任何匹配项的数量大于#输入阈值,多余的物品从购物车中删除。#需要注意的是,不会有通知给客户#当这种情况发生时。## -“enable”决定活动是否运行。可以是:# -“true”运行# -“false”表示不运行# - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - ':all'表示所有产品# - 'product_selectors'是一个标识符列表(从上面)#表示合格产品。产品/变体ID列表应该#只包含数字(即:没有引号)。如果使用':all',# this也可以是'nil'。# - 'variant_level_limit'决定是否低于限制#应用于变量或总数量级别。为例如,我可以有X个单独的匹配项目,#还是我只能有X个匹配的项目?#可以是:# - 'true'限制在一个变量级别# -“false”限制总数量# - 'quantity_allowed'是允许的产品数量# ================================================================QUANTITY_LIMITS={启用:真正的,活动:[{product_selector_match_type:包括,product_selector_type:标签,product_selectors:[“有限”],variant_level_limit:真正的,quantity_allowed:2,},]}# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type= =:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type= =:包括)= =@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束def所有(line_item)真正的结束结束# ================================================================# ProductQuantityLimitCampaign##如果任何匹配项的数量大于#输入阈值,多余的物品从购物车中删除。# ================================================================类ProductQuantityLimitCampaigndef初始化(启用,活动)@enable=启用@campaigns=活动结束def运行(车)返回除非@enable@campaigns.每一个做|运动|product_selector=ProductSelector.新(运动[: product_selector_match_type],运动[: product_selector_type],运动[: product_selectors])如果运动[: variant_level_limit]applicable_items={}车.line_items.每一个做|line_item|下一个除非product_selector.比赛吗?(line_item)id=line_item.变体.id如果applicable_items[id]。nil ?applicable_items[id]={项目:[],total_quantity:0}结束applicable_items[id] [:项目]。推(line_item)applicable_items[id] [: total_quantity]+ =line_item.数量结束下一个如果applicable_items.nil ?applicable_items.每一个做|id,信息|下一个除非信息[: total_quantity]>运动[: quantity_allowed]num_to_remove=信息[: total_quantity]-运动[: quantity_allowed]自我.loop_items(车,信息[:项目],num_to_remove)结束其他的applicable_items=车.line_items.选择{|line_item|product_selector.比赛吗?(line_item)}下一个如果applicable_items.nil ?total_quantity=applicable_items.地图(&数量:).减少(0,:+)下一个除非total_quantity>运动[: quantity_allowed]num_to_remove=total_quantity-运动[: quantity_allowed]自我.loop_items(车,applicable_items,num_to_remove)结束结束结束defloop_items(车,line_items,num_to_remove)line_items.每一个做|line_item|如果line_item.数量>num_to_removesplit_line_item=line_item.分裂(花:num_to_remove)打破其他的指数=车.line_items.find_index(line_item)车.line_items.delete_at(指数)num_to_remove- =line_item.数量结束打破如果num_to_remove< =0结束结束结束活动=[ProductQuantityLimitCampaign.新(QUANTITY_LIMITS[:使],QUANTITY_LIMITS[:活动],),]活动.每一个做|运动|运动.运行(输入.车)结束输出.车=输入.车