TL; DR:. Микроданные заставляют вас использовать элемент itemprop в том же элементе, что и элемент itemtype, который является элементом itemprops vaule. Как вы справляетесь с этим, если хотите разбить свой шаблон на частичные? Элемент может отображаться только в одном из двух мест, либо в содержащем шаблоне, либо в частичном части, оба из которых не очень хорошо работают.
Я использую Rails с haml, но, я думаю, мой вопрос относится к любому движку шаблонов, где вы можете разделить свой шаблон на меньшие частичные. Я сильно использую частичные, это означает, что мои шаблоны обычно не более 10 строк кода. Но установка микроданных в них кажется чрезмерно сложной, так как вы должны правильно использовать микроданные с частичными?
Возьмем этот пример:
#app/views/article/show.html.haml
%p Hey, Welcome! Read This wonderful article:
= render @article
#app/views/articles/_article.html.haml
%div[ article ]
%h1= @article.title
%p= @article.description
%div= render @article.video
#app/views/videos/_video.html.haml
%div[ video ]
%h2= video.file_name
%video{ src: video.url }
И теперь с микроданными:
#app/views/articles/_article.html.haml
%div[ article ]{ itemscope: true, itemtype: 'http://schema.org/Article' }
%h1{ itemprop: 'name' }= @article.title
%p{ itemprop: 'description' }= @article.description
%div{ itemprop: 'video' }= render @article.video
И что тогда? Я должен добавить элемент VideoObject
itemtype в том же div, который имеет itemprop: 'video'
, потому что, как работают микроданные. Итак:
#app/views/articles/_article.html.haml
%div{ itemprop: 'video', itemscope: true, itemtype: 'http://schema.org/VideoObject' }= render @article.video
Но тогда я не могу снова использовать тот же элемент itemtype в частичном видео. Теперь это будет недействительным:
#app/views/videos/_video.html.haml
%div[ video, itemscope: true, itemtype: 'http://schema.org/VideoObject' ]
Но элемент item принадлежит видео. Я не хочу повторять это в каждом контейнере. Я хочу, чтобы иметь возможность использовать видео частица везде, и все еще его объявили как видео с микроданными. Таким образом, все это должно перейти из частичной части статьи и частичного части VID:
#app/views/articles/_article.html.haml
%div= render @article.video
#app/views/videos/_video.html.haml
%div[ video ]{ itemprop: 'video', itemscope: true, itemtype: 'http://schema.org/VideoObject' }
Опять же, itemprop должен быть на том же элементе, что и тип элемента видео. Но почему для частичного ухода за видео/знать, как вызвано itemprop, что это значение?
Единственное решение, которое у меня есть, - передать itemprop в частичное. Это также означает, что мы должны объявить значение itemprop по умолчанию в случае, если никто не передан. Итак, мы закончили с этим:
#app/views/articles/_article.html.haml
%div= render @article.video, itemprop: 'video'
#app/views/videos/_video.html.haml
itemprop ||= nil
%div[ video ]{ itemprop: itemprop, itemscope: true, itemtype: 'http://schema.org/VideoObject' }
Это кажется слишком сложным. Кроме того, мне кажется довольно запутанным передать имя элемента itemprop в частичное, поэтому частичный знает, что называется itemprop, что это значение. Как странно это? Нигде в программировании я не сталкивался с объектами, которые должны были знать имя того, что указывает на них.
Итак, есть ли лучший способ сделать это? Или так оно и есть, и я не должен был так скулить об этом? ☺