0

我正在为我的应用程序中的某些项目实现 Google +1 按钮。项目由不同控制器中的两个控制器操作显示。

Google +1 要我修改我的

<html>

标记为

<html itemscope itemtype="http://schema.org/ItemPage">

对于那些显示项目的页面。处理这个问题的最佳方法是什么?我想过两种不同的解决方案。

1)我是否应该为这些控制器创建新的布局文件,这些文件将具有修改后的 html-tag,但应该与默认布局相同。然后我需要将布局文件的主要部分放入一个部分中,这样我就不需要复制它了。这个解决方案听起来有点太复杂了。

2) 另一种解决方案可能是使用 content_for。然后我需要定义一种默认的 content_for ,它应该在所有其他控制器中使用并在这两个控制器中覆盖它。

稍后我可能还需要为另一个控制器添加类似的属性,因此该解决方案应该允许我轻松更改每个控制器操作的属性。

4

1 回答 1

1

你可以只使用嵌套布局吗?

例如:

app/views/layouts/google_plus.html.erb

<% content_for :html_attrs do %>itemscope itemtype="http://schema.org/ItemPage"<% end %>

<%= render :template => 'layouts/application' %>

app/views/layouts/application.html.erb

<html <% content_for( :html_attrs ) %>>

并设置google_plus为这些控制器的布局。

(Google 按钮依赖于 JavaScript,对吗?如果是这样,您也可以使用这种技术嵌入 JavaScript,从而在这些页面中添加属性。)

如果您希望能够在每个控制器的基础上任意设置 attrs,那么只需:

控制器

def show

  @html_attrs = 'itemscope itemtype="http://schema.org/ItemPage"'

end

布局

<html <%= @html_attrs %>>

显然,您可能希望以某种方式将其概括为适用于多个操作。

于 2012-06-23T23:00:46.083 回答