Spree中的自定义元描述和关键字标签

时间:2014-10-31 15:59:31

标签: ruby-on-rails spree

我正在尝试修改默认的元描述和关键字标签。我坚持这个问题,我不太清楚狂欢。

我相信他们被安排在这里:spree / core / app / helpers / spree / base_helper.rb

2 个答案:

答案 0 :(得分:2)

您需要在第二行使用:

module Spree
  module  BaseHelper.class_eval 
     ...
  end
end

这应该有效。

答案 1 :(得分:1)

此代码已经过测试并且正在运行。感谢@aledustet帮助我找到解决方案:)

创建/app/helpers/spree/base_helper_decorator.rb并将以下代码放入其中。不要使用/app/helpers/spree/base_helper.rb,因为您必须复制/粘贴base_helper.rb中的每个方法才能使其正常运行。

module Spree
  module BaseHelper

    def meta_data
      meta = ({
        keywords: "test keyword",
        description: "test description",
      })
    end

  end
end

您也可以

Spree::BaseHelper.module_eval do
  ....
end

我读到其他人报告第二个解决方案工作的时候,第一个没有,所以我发布了两个。两者都适合我。

Per Ryan Bigg:没有特别的理由使用class_eval和module_eval,这只是Spree项目很长一段时间的习惯。 https://stackoverflow.com/a/12075315/2229277

此时您可以控制元数据,但如何在控制器特定的基础上进行设置?您可以通过创建私有方法并在控制器中调用helper_method函数来完成此操作。这是一个正在运行和测试的完整示例:

class BrandsController < Spree::StoreController

  helper_method :my_meta_data

  #controller actions here.

  private
  def my_meta_data
    meta = ({
      keywords: "keywords here",
      description: "description here",
    })
  end

end

我的基本帮助器看起来像这样,因此如果没有定义my_meta_data方法,它可以有一些默认的元数据。

module Spree
  module BaseHelper

    def meta_data
      if (defined? my_meta_data)
        meta = my_meta_data
      else
        meta = ({
          keywords: "default keywords here",
          description: "default description here",
        })
      end
    end

  end
end