【问题标题】:Placing Facebook Metatags in Rails Application在 Rails 应用程序中放置 Facebook 元标记
【发布时间】:2013-02-02 11:47:18
【问题描述】:

我已经实现了 Omniauth 和 Koala7 gem 来将我的应用程序与 Facebook 集成。 除了使用自定义对象发布自定义操作的一个小问题之外,一切都运行良好。

问题是我的对象 url 应该是新创建帖子的显示页面,例如 /posts/1。为了使这个页面被识别为 facebook 对象,我需要将 facebook 元标记放在 show.html.erb 的顶部,如下所示:

<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# sdff: http://ogp.me/ns/fb/sdff#">
  <meta property="fb:app_id" content="myid" /> 
  <meta property="og:type"   content="sdff:post" /> 
  <meta property="og:url"    content="<%= "http://sdff.herokuapp.com" + post_path(@post) %>" /> 
  <meta property="og:title"  content="Sample" /> 
  <meta property="og:image"  content="https://fbstatic-a.akamaihd.net/images/devsite/attachment_blank.png" /> 
</head>

问题在于 facebook object debugger 将其识别为 type:webpage 而不是 type:post。我认为这是因为在 /layouts/application.html.erb 中已经有了默认的 head 标签,如下所示:

<head>
  <title>sdff</title>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>

我假设这是因为对象调试器特别指出:

正文中的元标记:您在 .这可能是因为您的格式错误并且它们在解析树中的位置较低,或者您不小心将 Open Graph 标签放在了错误的位置。无论哪种方式,您都需要在标签可用之前对其进行修复。

那么我该如何解决这个问题呢? 我需要将 facebook 元标记放在我的 show.html.erb 中,但页面本身已经是整个应用程序布局主体的一部分。

【问题讨论】:

    标签: ruby-on-rails facebook-opengraph meta-tags


    【解决方案1】:

    根据您发布的错误消息,我认为您的元标记不在&lt;head&gt; 中,因为它们应该是。这是使用content_for 块的好例子。在您的 show.html.erb 视图中,将所需的元标记放入 content_for :head 块中。这会保存 html 并允许您将其插入布局中的其他位置。

    <% content_for :head do %>
      <meta property="fb:app_id" content="myid" /> 
      <meta property="og:type"   content="sdff:post" /> 
      <meta property="og:url"    content="<%= "http://sdff.herokuapp.com" + post_path(@post) %>" /> 
      <meta property="og:title"  content="Sample" /> 
      <meta property="og:image"  content="https://fbstatic-a.akamaihd.net/images/devsite/attachment_blank.png" /> 
    <% end %>
    

    然后只需将yeild(:head) 添加到您的应用程序模板。您放置在显示视图中的 html 将插入到应用程序模板中的该位置。我们在这里检查 nil 以便认为收益率是可选的。

    <head>
      <title>sdff</title>
      <%= stylesheet_link_tag    "application", :media => "all" %>
      <%= javascript_include_tag "application" %>
      <%= csrf_meta_tags %>
      <%= content_for?(:head) ? yield(:head) : '' %>
    </head>
    

    【讨论】:

    • 感谢您的帮助格雷格。我忘了我可以使用content_for :)
    • 如果我使用content_for,前缀应该放在哪里?
    • 应用程序的每个页面上的前缀是否需要不同?解决此问题的一种方法是使用实​​例变量或辅助方法。假设您在较早的时候设置了该变量,&lt;head &lt;%= @facebook_prefix %&gt;&gt; 之类的东西可能会起作用。
    猜你喜欢
    • 2020-12-23
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多