2012-06-23 2 views
0

Я использую кнопку Google +1 для некоторых элементов в своем приложении. Элементы показаны двумя действиями контроллера в разных контроллерах.Как добавить дополнительный атрибут в <html> тег для двух контроллеров (Ruby on Rails)

Google +1 хочет, чтобы изменить мой

<html> 

тег в

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

для тех страниц, которые показывают элементы. Какой был бы лучший способ справиться с этим? Я подумал о двух разных решениях.

1) Должен ли я создавать новые файлы макетов для этих контроллеров, которые будут иметь этот измененный тег html, но должны быть другим типом, аналогичным макету по умолчанию. Тогда мне нужно будет поместить основную часть файла макета в частичную, чтобы мне не нужно было ее дублировать. Это решение кажется слишком сложным.

2) Другим решением может быть использование content_for. Затем мне нужно будет определить тип содержимого по умолчанию, которое должно использоваться во всех других контроллерах и переопределить его в этих двух контроллерах.

Позже мне может понадобиться добавить аналогичные атрибуты для другого контроллера, поэтому решение должно позволить мне легко изменять атрибуты для каждого действия контроллера.

+0

Из документации Google вы узнаете, что она также может использовать разметку Open Graph, поэтому мне больше не нужно вставлять ее в свой html-тег, поскольку у меня уже есть разметка Open Graph. – Mika

ответ

1

Можете ли вы просто использовать вложенный макет?

E.g. что-то вроде:

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 на этих страницах.)

Если вы хотите, чтобы иметь возможность установить AttrS произвольно на основе каждого контроллера, насчет всего:

контроллер

def show 

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

end 

раскладка

<html <%= @html_attrs %>> 

Очевидно, что вы можете обобщить это как-то, чтобы применить к нескольким действиям.

+0

Я закончил делать это со вторым вариантом. Я только добавил вспомогательный метод между тем, где я определяю значение по умолчанию для html_attrs, поэтому мне нужно только определить @html_attrs в тех контроллерах, где необходимы дополнительные атрибуты. Долгое время я боролся с атрибутом «itemscope», потому что Firebug показывал его в формате itemscope = «», хотя в источнике страницы он был правильно без части «". – Mika

+0

@Mika, по-видимому, это причуда того, как Firebug отображает минимизированные логические атрибуты. Здесь обсуждается это: https://groups.google.com/d/topic/mozilla.dev.platform/D7ItcHhKMNI/discussion и https://groups.google.com/d/topic/mozilla.dev.platform/S1NCZrn_0iY/обсуждение – JMM

Смежные вопросы