TL; DR: Microdata强制您使用itemprop作为此itemprops值的itemtype。如果你想把你的模板分解成部分,你如何处理这个问题?该元素可能只出现在两个地方之一中,无论是在包含模板中还是在包含的部分中,这两者都不能很好地工作。Microdata:如何使用模板/部分?
我正在使用haml的Rails,但我想我的问题适用于任何模板引擎,您可以将模板分割成更小的部分。我大量使用partials,这意味着我的模板通常不会超过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
然后呢?我必须在同一个div上添加VideoObject
itemtype,它具有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' ]
但是itemtype属于视频。我不想在每一个容器元素中重复它。我希望能够在其他地方使用部分视频,并且仍然会将其视为具有微数据的视频。所以,整个事情已经搬出物品的部分,进入VIDO部分是这样的:
#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传递给partial。这也意味着,如果没有传递,我们必须声明一个默认的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的名称传递到partial中会让人感到困惑,因此partial会知道itemprop被调用的是它的值。这有多奇怪?在编程的其他地方,我遇到了需要知道指向它们的事物名称的对象。
那么有没有更好的方法来做到这一点?或者,这是怎么回事,我不应该这么唠叨呢? ☺
支持这样一个雄辩的问题! – 2014-09-05 09:32:07
@RichPeck是的,在完成后我想,这应该是一个博客文章,而不是。但是再一次,我没有博客,所以,呃。 ;) – Conkerchen 2014-09-05 09:36:49
唯一的问题是像我这样的人想看到一个简短的问题来回答:D需要大量的脑力来制定答案,而不必解决原始问题。你可以加一个旁边给我们一个更简洁的问题吗? – 2014-09-05 09:39:55