0

アプリケーションの一部のアイテムにGoogle+1ボタンを実装しています。アイテムは、異なるコントローラーの2つのコントローラーアクションによって表示されます。

Google +1は、私に変更を求めています

<html>

タグを付ける

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

アイテムを表示するページの場合。これを処理するための最良の方法は何でしょうか?私は2つの異なる解決策について考えました。

1)これらのコントローラー用に新しいレイアウトファイルを作成する必要があります。このファイルには、変更されたhtmlタグが含まれますが、デフォルトのレイアウトと同じである必要があります。次に、レイアウトファイルの主要部分を部分的に配置して、複製する必要がないようにする必要があります。このソリューションは少し複雑すぎるように聞こえます。

2)別の解決策はcontent_forを使用することかもしれません。次に、他のすべてのコントローラーで使用するデフォルトのcontent_forの種類を定義し、これら2つのコントローラーでオーバーライドする必要があります。

後で、他の1つのコントローラーにも同様の属性を追加する必要がある場合があるため、このソリューションでは、コントローラーのアクションごとに属性を簡単に変更できるはずです。

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を埋め込むことができます。)

コントローラごとに属性を任意に設定できるようにしたい場合は、次のようにします。

コントローラ

def show

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

end

レイアウト

<html <%= @html_attrs %>>

明らかに、いくつかのアクションに適用するために、それを何らかの形で一般化することをお勧めします。

于 2012-06-23T23:00:46.083 に答える