热门标签 | 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
}

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

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


推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • VSCode快速查看函数定义和代码追踪方法详解
    本文详细介绍了在VSCode中快速查看函数定义和代码追踪的方法,包括跳转到定义位置的三种方式和返回跳转前的位置的快捷键。同时,还介绍了代码追踪插件的使用以及对符号跳转的不足之处。文章指出,直接跳转到定义和实现的位置对于程序员来说非常重要,但需要语言本身的支持。以TypeScript为例,按下F12即可跳转到函数的定义处。 ... [详细]
  • 本文介绍了使用Rust语言编写、保存和编译程序的简单步骤。首先,打开记事本文件并编写程序代码,然后将代码保存到一个以.rs为扩展名的文件中。接下来,使用rustc命令来编译运行程序。最后,通过命令行运行编译后的程序,得到输出结果。如果遇到编译错误,可以下载Build Tools for Visual Studio 2017来解决。 ... [详细]
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社区 版权所有