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

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

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


推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
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社区 版权所有