热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在保留option_selection.js

我正在使用shopify,并希望在变量选择器下拉列表中显示变量价格。Shopify使用名为option_selec

我正在使用shopify,并希望在变量选择器下拉列表中显示变量价格。 Shopify使用名为option_selection.js的资产来实施变体选择功能。该资产是站点正常运行所必需的;但是,此资产将覆盖在product.liquid文件中创建的select标签。

不包括option_selection.js,您可以简单地将变量价格添加到product.liquid文件中的每个选项。像这样:




但是,在启用option_selection.js的情况下,此选择下拉列表将替换为仅包含变体标题而没有其他信息的另一个下拉列表。

经过反复试验,我发现我可以使用以下代码片段覆盖Shopify.Product.prototype.optionValues脚本标签之后的脚本标签中的option_selection.js

Shopify.Product.prototype.optiOnValues= function(o) {
if (!Shopify.isDefined(this.variants)) return null;
var t = Shopify.map(this.variants,function(t) {
var e = "option" + (o + 1);
if(t[e] == undefined) {
return null
} else {
var value = t[e] + " - " + Shopify.formatMoney(t.price)
if(!t.available) value += " - No Stock"
return value
}
});
return null == t[0] ? null : Shopify.uniq(t)
}

该代码段将覆盖以下代码段:

Shopify.Product.prototype.optiOnValues= function(o) {
if (!Shopify.isDefined(this.variants)) return null;
var t = Shopify.map(this.variants,function(t) {
var e = "option" + (o + 1);
return t[e] == undefined ? null : t[e]
});
return null == t[0] ? null : Shopify.uniq(t)
}

但是,这会使option_selection.js中实现的其余功能完全停止工作。我不明白为什么此更改会影响脚本的其余部分,但确实如此。

要对此进行测试,您可以创建一个具有两个变体的项目,一个可用,一个不可用。选择可用项目应启用“添加到购物车”按钮,而选择不可用选项则应禁用该按钮。这是option_selection.js实现的众多功能之一,一旦实施此尝试的修复,该功能就会失败。

如何在保留option_selection.js及其功能的同时,将变体价格包含在变体选择下拉列表中?




  • 该问题与Shopify option_selection.js - how to modify?
  • 有关,但并非重复:
  • shopify论坛上的此问题与此处的问题非常相似,没有解决方案(或解决方案不足):Display variant pricing in dropdown box

  • 这是shopify论坛上的另一个问题,它要求使用大量代码转储并且没有答案的同一件事:Variant Price not showing in drop down

  • 这是shopify论坛上的另一个问题,它问同样的问题,此处没有建议答案,但由于多种原因而没有足够的答案:Show variant and the PRICE on the drop down selector

  • 这是shopify论坛上的又一个问题,要求作者做一些初步的挖掘工作,但option_selection.js文件却没有得到答案:Having prices next to variant options drop down


事实证明,尝试第二种解决方案的问题在于option_selection.js中的以下代码段:

Shopify.SingleOptiOnSelector= function(o,i,t,e) {
this.multiSelector = o,this.values = e,this.index = i,this.name = t,this.element = document.createElement("select");
for (var r = 0; r var n = document.createElement("option");
n.value = e[r],n.innerHTML = e[r],this.element.appendChild(n)
}
return this.element.setAttribute("class",this.multiSelector.selectorClass),this.element.setAttribute("data-option","option" + (i + 1)),this.element.id = o.domIdPrefix + "-option-" + i,this.element.Onchange= function(t,e) {
e = e || {},o.updateSelectors(i,e)
},!0
}

在此代码段中,.innerHTML属性被设置为与值相同。您实际上并不想更改该值,而只想更改innerHTML。为了达到此效果,我们将不得不在option_selection.js中进行一些更改。

复制shopify的option_selection.js并制作我们自己的副本更容易。为此,您可以阅读生成的页面源以查找脚本URL,然后将该源复制到文件名option_selection和扩展名.js的新资产中。接下来,将源(使用代码美化器将其粘贴到新创建的资产中)。然后,您只需将shopify_asset替换为asset,即可将shopify资产标签更改为常规资产标签。

在新资产中找到以下代码段:

Shopify.Product.prototype.optiOnValues= function(o) {
if (!Shopify.isDefined(this.variants)) return null;
var t = Shopify.map(this.variants,function(t) {
var e = "option" + (o + 1);
return t[e] == undefined ? null : t[e]
});
return null == t[0] ? null : Shopify.uniq(t)
}

然后在该代码段之后添加以下代码段:

Shopify.Product.prototype.optiOnTexts= function(o) {
if (!Shopify.isDefined(this.variants)) return null;
var t = Shopify.map(this.variants,function(t) {
var e = "option" + (o + 1);
if(t[e] == undefined) {
return null
} else {
var value = t[e] + " - " + Shopify.formatMoney(t.price)
if(!t.available) value += " - No Stock"
return value
}
});
return null == t[0] ? null : Shopify.uniq(t)
}

请注意,此函数有一个新名称.optionTexts,因为此函数只会创建要插入选项标签内的文本。

下一步找到以下行:

var e = new Shopify.SingleOptionSelector(this,this.product.optionNames()[t],this.product.optionValues(t));

然后将该行替换为以下行:

var e = new Shopify.SingleOptionSelector(this,this.product.optionValues(t),this.product.optionTexts(t));

在这里,我们正在调用新创建的text函数,并将结果与​​原始value函数一起传递。

接下来找到以下代码段:

Shopify.SingleOptiOnSelector= function(o,!0
}

然后用以下代码段替换该代码段:

Shopify.SingleOptiOnSelector= function(o,e,texts) {
this.multiSelector = o,n.innerHTML = texts[r],!0
}

在这里,我们接受先前传递的要插入选项标签的文本列表,并插入该列表而不是值列表。

这样,值保持不变,文本将更改为您想要的任何文本。


推荐阅读
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • Excel技巧:单元格中显示公式而非结果的解决方法
    本文探讨了在Excel中如何通过简单的方法解决单元格显示公式而非计算结果的问题,包括使用快捷键和调整单元格格式两种方法。 ... [详细]
  • 本文探讨了如何利用 Android 的 Movie 类来展示 GIF 动画,并详细介绍了调整 GIF 尺寸以适应不同布局的方法。同时,提供了相关的代码示例和注意事项。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文介绍如何使用R语言中的相关包来解析和转换搜狗细胞词库(.scel格式),并将其导出为CSV文件,以便于后续的数据分析和文本挖掘任务。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 数据输入验证与控件绑定方法
    本文提供了多种数据输入验证函数及控件绑定方法的实现代码,包括电话号码、数字、传真、邮政编码、电子邮件和网址的验证,以及报表绑定和自动编号等功能。 ... [详细]
author-avatar
Jack捷L
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有