【问题标题】:How to find Product Images depending on the Alt tag?如何根据 Alt 标签查​​找产品图片?
【发布时间】:2023-03-24 21:48:01
【问题描述】:

我已经能够在通过 html 表单将图像上传到产品时设置 Alt 标签。

images = params[:images] || nil

if images
 images.each do |image|
      a = ShopifyAPI::Image.new
      a.prefix_options = {:product_id => params[:product_id]}
      a.metafields = [{:key => 'alt', :value => 'Cake', :value_type => "string", :namespace =>  "tags"}]
      a.attachment = Base64.encode64(image.read)
      a.filename = image.original_filename
      a.save
 end
else
.
.
.

但是在检索产品的图像时,我似乎无法弄清楚其中的 alt='Cake'。我尝试通过 ShopifyAPI 控制台搜索元字段,但没有任何乐趣。


如果能这么简单就好了……

a = ShopifyAPI::Image.where(alt: 'Cake', product_id: 245512249)

或者更好...

a = ShopifyAPI::Product.find(245512249)
b = a.images.select { |image| image.alt == 'Cake' }

或者...

a = ShopifyAPI::Product.find(245512249)
a.images.each do |image|
  b << image if image.alt == 'Cake'
end

【问题讨论】:

  • 当您通过一个 api 调用获得产品时,您将获得它的所有图像。然后迭代图像以查找您感兴趣的图像将是微不足道的。这比基于 alt 标签的内容搜索图像更简单、更可靠。
  • @DavidLazar 谢谢,但我也尝试过这种方式。问题是,图像没有 alt 属性。他们似乎依赖于链接表 Metafields - 我尝试查看存在哪些元字段,但没有与图像相关的元字段
  • 是的.. alt 标签是一个元字段,因为这些资源是额外的......如果不搜索所有图像就无法搜索它们......你很幸运。无论如何,为逻辑使用 alt 标签可能是个坏主意。我会留下他们,因为他们的唯一目的是为 SEO 解释图片。
  • @DavidLazar 你知道'alt'标签元字段在哪里吗?奇怪的是,它们似乎不通过 Shop 元字段或 Product 元字段存在。你会如何建议我标记每张图片,然后进行搜索?
  • 然后坚持使用文件名键并避免元字段的复杂性。您的代码将更易于维护,并且您消除了许多不必要的复杂性。为 SEO 保留 alt 标签。只是我的 0.02 完成了你想做的几十次......或更多

标签: ruby-on-rails ruby-on-rails-4 shopify activeresource


【解决方案1】:

没有办法根据 Alt 标签调用产品图片; ShopifyAPI 不允许这样做。


话说回来,这是一个商业机密……

只需将 Alt 标记的值标记为图像的文件名即可。

images = params[:images] || nil

if images
 images.each do |image|
      a = ShopifyAPI::Image.new
      a.prefix_options = {:product_id => params[:product_id]}
      a.metafields = [{:key => 'alt', :value => 'Cake', :value_type => "string", :namespace =>  "tags"}]
      a.attachment = Base64.encode64(image.read)
      a.filename = 'Cake_'+image.original_filename
      a.save
 end
else
.
.
.

这样,您可以通过 ':src' 属性上的字符串值 'Cake_' 过滤产品图片。

@product = ShopifyAPI::Product.find(params[:id])

@product.images.each do |image|
  if image.attributes[:src].include?('Cake_')
    .
    .
    .
  end
end

希望有帮助!

【讨论】:

    猜你喜欢
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多