为自定义 Shopify 应用存储和检索数据

Posted

技术标签:

【中文标题】为自定义 Shopify 应用存储和检索数据【英文标题】:Storing and retrieving data for custom Shopify apps 【发布时间】:2021-04-02 10:32:50 【问题描述】:

所以我正在尝试为我的商店构建一些东西,但有些事情还不清楚。

    如果我需要保存一些用户设置,我需要自己的后端吗? 专门针对那个应用程序?为简单起见,我想构建一个应用程序 在 cart-template.liquid.To 中保存并显示自定义消息 实现这一点,我认为我的应用程序应该向我的后端发出请求(让 比如说,在heroku上)并将其保存在该应用正在使用的某个数据库中?

    如何在 cart-template.liquid 中检索该数据?我想我 构建一个调用我的后端公共端点的 sn-p 使用 fetch() 或 axios.get 和 使用 % render 'fetch-custom-message-sn-p' % 嵌入它?

    假设我要求用户输入,即。 “刻字”,表格在 cart-template.liquid 中, 当然。使用以下sn-p:

    <p class="line-item-property__field">
      <label for="engraved-message">Engraved message</label>
      <input id="engraved-message" type="text" name="properties[Engraved message]">
    </p>
    

    我如何确保捕获这些信息并将其传递给我?我想我想在订单详情中的某处看到它。

【问题讨论】:

【参考方案1】:

这里是专门用于创建自定义shopify输入字段以获取雕刻信息的教程:https://community.shopify.com/c/Shopify-Design/Product-pages-Get-customization-information-for-products/td-p/616503

【讨论】:

【参考方案2】:

如果我需要保存一些用户设置,我是否需要专门针对该应用使用自己的后端?为简单起见,我想构建一个应用程序来保存并在 cart-template.liquid 中显示自定义消息。为了实现这一点,我认为我的应用程序应该向我的后端(比如说在 heroku 上)发出请求并将其保存在一些该应用正在使用的数据库?

是的,您需要自己的后端。您的应用程序独自负责存储自己的信息(有一些例外情况,例如我在下面向您展示的特殊订单字段) - 这通常会推断出备份您的服务并保存您的数据的数据库。请查看this thread,因为您可以在那里找到很多有价值的信息。

关于cart-template.liquid,我建议查看"Shopify Developers" 官方文档。 您可以显示和请求的所有信息都在这里得到了清晰的解释和排序。

如何在 cart-template.liquid 中检索该数据?我想我构建了一个 sn-p,它调用后端的公共端点,该端点使用 fetch() 或 axios.get 返回保存的消息,并使用 % render 'fetch-custom-message-sn-p' % 嵌入它?

再一次有很好的指南。我建议看一下this blog post,它深入探讨了这个话题。 Shopify's documentation 关于 Liquid 模板语言也强烈建议阅读。

您如何检索这些数据?根据此specific example,任何输入都将提供给您在 Shopify 后台的订单页面。例如:

<label for="CartNote">Special instructions</label>
<textarea name="note" id="CartNote"> cart.note </textarea>

*取自https://shopify.github.io/liquid-code-examples/example/cart-notes*; 显示Special instruction 标签和文本区域供用户提交有关订单的详细信息 - 如前所述,您将在 Shopify 后台的订单页面上获得此数据。

假设我要求用户输入,即。 “刻字”和表格在 当然,cart-template.liquid。使用以下 sn-p: [...] 我如何确保捕获这些信息并将其传递给我?我想我想在订单详情中的某处看到它。

见上文

//编辑:

为了防止任何混淆:您似乎只想开发一个自定义应用程序供个人使用,而不是在Shopify App Store 中发布它 - 在这种情况下,您通常不需要外部数据库;例如您提供的示例带有一个简单的订单请求,可以通过 Shopify 的示例轻松实现。

对于您的具体情况,此代码 sn-p(我修改您的原始示例以适合该情况 - 显然它不是完整的 cart-template.liquid;在这种情况下,该文件称为 cart.liquid) :

<label for="engraved-message">Engraved message</label>
<textarea name="message" id="engraved-message"> cart.note </textarea>

//编辑2:

该链接 - 由该线程中的另一个用户共享,即 @Simas Butavičius - 如果您在一般的自定义过程中遇到问题,即如果您想修改一些基本的概念或想检查如何在您网站的整个结构中从上面实现代码 sn-p 我建议浏览this site。

不用说,good tutorials、questions regarding the same "issue" 或其他资源一般有数百个。


我建议出于进一步阅读的目的查看其中一些链接和指南(上面可能提​​到了一些):

https://shopify.github.io/liquid-code-examples/example/cart-notes https://shopify.github.io/liquid-code-examples/example/checkout-form(!非常好的深入示例) https://www.christhefreelancer.com/shopify-liquid-guide/ https://shopify.dev/docs/themes/theme-templates/cart-liquid https://shopify.dev/docs/themes/liquid/reference https://www.shopify.com/partners/shopify-cheat-sheet(!有用的备忘单) https://community.shopify.com/c/Shopify-Design/Cart-Use-cart-attributes-to-collect-more-information/td-p/613718 https://community.shopify.com/c/Shopify-APIs-SDKs/Add-custom-input-fields-to-cart/td-p/154710 https://community.shopify.com/c/Shopify-Design/Product-pages-Get-customization-information-for-products/td-p/616503

【讨论】:

RE:Shopify 的 Liquid 文档。您提到的那篇博客文章在描述语言方面做得很好,但它并没有真正谈论从“外太空”获取数据。坦率地说,我认为这方面没有任何“最佳实践”。我见过一些只使用 jQuery.ajax().. 的项目 @mikek 是的 - 我在做研究时也看到了那些(例如,使用 jQuery 的 GitHub 存储库)。我链接 Shopify 的 Liquid 文档的原因仅仅是为了完整性。你永远不知道——也许有人会在几个月后读到这篇文章,并且可能会很高兴拥有这个来源。无论如何,关于cart notes 的后者对于您的问题(正如我链接的那样)特别非常有用。 @J.M.Arnold 你分享的关于存储用户数据的帖子正是我想要弄清楚的。我需要为商店存储第 3 方 API 访问令牌。您知道 Metafields 现在是否适合存放它们?如果没有,我不确定是否有一种安全的方法可以将 Shopify 店主与我们的一位用户及其访问令牌相匹配。

以上是关于为自定义 Shopify 应用存储和检索数据的主要内容,如果未能解决你的问题,请参考以下文章

IAR 为自定义数据定义内存区域

text Shopify自定义应用

为自定义类保存到 nsuserdefaults 的最佳方法?

DataContractSerializer Readobject 为自定义对象返回 null

在 Swift 中的自定义单元格中存储/检索核心数据

IIS 7.5 应用程序池为自定义用户使用错误的 %APPDATA% 作为标识