Homeland ruby-china 代码中关于 seo 的部份

buyhome · 2012年08月19日 · 最后由 jhjguxin 回复于 2012年08月22日 · 2927 次阅读

最近看 seo 的东西,发现 ruby-china 代码中 application.html.erb 文件:

<meta name="keywords" content="<%= @meta_keywords %>" />
<meta name="description" content="<%= @meta_description %>" />

对应 controller 中有定义:

def set_seo_meta(title = '',meta_keywords = '', meta_description = '')
  if title.length > 0
    @page_title = "#{title}"
  end
  @meta_keywords = meta_keywords
  @meta_description = meta_description
end

不过却没有传递 meta_description 变量

如果设成 Setting.meta_description,在 config.yml 控制。

大家的建议呢?

或许我没有看明白代码作者的意图。

description 每个页面是不一样的,你怎么写到 Setting 里啊?

#1 楼 @ywencn 啊 最近也遇到这方面的问题,最后的解决方案是这样的: 像 meta keywords 还有 page title 或 javascript/css 这些页面里固定位置的元素渲染都不用实例变量去搞,而是用 content_for。用 controller 去做这样的事情有几个确定:

1.从职责角度来讲,这完全不是 controller 应该做的,是 view 的职责。 2.会初始化很多莫名其妙的实例变量(虽然 Rails 里 controller 和 view 之间就是这样通讯的,但我还是看着不舒服...) 3.controller 代码增多。

application.html.erb:

<title><%= yield :page_title || "default page title" %></title>
<meta name="keywords" content="<%= yield :keywords || "default keywords" %>" />

然后在 view 里 render:

<% content_for :page_title  do %>
  这里是页面标题
<% end %>

<%= content_for :keywords do %>
  这里是keywords
<% end %>

#2 楼 @hooopo 写个 helper 嘛。。。一个 title 占 3 行么

#3 楼 @ywencn 这已经是 helper 了。。主要是 erb 里写 block 都这样啊 换成花括号就一行了

set_seo_meta 需要 你在需要设定 seo 的 controller 和 action 去 call 然后在 view 里面才会有 相应的实例变量 https://gist.github.com/3185931 我这里有个 稍微自动点的

@ywencn 是可以写在 yml 里面的 可以做一个单独的 seo 的 yml 可以依赖 controller 和 action 和 seo 类型 title keyword description 命名键值 然后统一用一个 filter 来 调用 我觉得这样 也是不错的 解决方法 这样的话比存在数据库 更简单可见

#6 楼 @jhjguxin seo 和 title 可能是动态的,比如和文章标题或标签有关。用 yml 不灵活。

@ywencn 毕竟只是一个 初始化方案 可以用来做那些 比如栏目 需要编辑人工干预的一些配置 因此可以在 base controller 的 filter 里面做一个初始化定义的 这个方法或者说这个方法里面初始化的实例变量 是可以在 controller 里面再次覆盖的

#8 楼 @jhjguxin 可以两部分结合起来的,yml 里放固定的东西,需要加上文章标题的地方加文章标题。我们以前项目就是这么弄的

@ywencn 对的对的 你把我没说明白的说明白了 嘿嘿

需要 登录 后方可回复, 如果你还没有账号请 注册新账号