Как получить доступ к структурированным метаданным с помощью DocPad?

В данный момент я оцениваю DocPad, чтобы посмотреть, подойдет ли он, среди прочего, для нашего веб-сайта. У меня возникли проблемы с тем, как использовать структурированные метаданные в эко-шаблонах. Я почти уверен, что это связано с Как отобразить вложенный атрибут Backbone с помощью Eco ? но это тоже без ответа.

Моя страница выглядит так:

--- yaml
layout: 'post'
title: "Samuel Johnson's garret - an unexpected lull"
category: 'Digital Publishing'
author: 
    name: Author Name
    page: author
    email: [email protected]
---


Unexpected free time, a chilly walk, a brown plaque leads me to 
[Dr Johnson's house (http://www.drjohnsonshouse.org/) near Fleet-Street…

и эко-шаблон вроде:

---
layout: default
---

<article id="post" class="post">
    <h1><%= @document.title %></h1>
    <h2>By: <%= @document.author.email %></h2>
    <div class="post-content"><%- @content %></div>
</article>

@document.author.email приводит к регистрации следующей ошибки:

TypeError: Cannot read property 'email' of undefined

Как получить доступ к этим структурированным метаданным?

спасибо


person Nic Gibson    schedule 10.01.2013    source источник


Ответы (2)


Кажется, все в порядке. Когда я тестирую ту же структуру, строка <%= @document.author.email %> работает. Может быть, у вас есть какая-то несогласованность с использованием пробелов и вкладок? Вы можете проверить свой YAML на этом сайте: http://yamllint.com.

Лично я также использую массивы объектов в метаданных:

choices:
  - 
    text: "Mercure"
    feedback: "Mercure est la planète la plus proche du Soleil, elle se situe à une distance de 0,4 UA"
    value: 0

  - 
    text: "Neptune"
    feedback: "C'est effectivement la planète la plus éloignée avec une distance de 30 UA."
    value: 1

и это прекрасно работает. Извините за текст на французском языке, но я думаю, что это не имеет большого значения для примера.

person Dharma    schedule 10.01.2013
comment
Черт. Должен был подумать об этом! Ошибка пробела в первой строке вложенного ассоциативного массива. Спасибо, что заставили меня задуматься. - person Nic Gibson; 10.01.2013
comment
Хм. Даже с действительным YAML это не решает основную проблему. - person Nic Gibson; 10.01.2013
comment
Ваш блок документов обновлен? Еще в октябре возникла проблема с парсером YAML. - person Dharma; 10.01.2013
comment
Да, обновлено в прошлое воскресенье. Я делаю что-то не так, но не вижу, что это такое. - person Nic Gibson; 10.01.2013
comment
Вы пытались использовать этот синтаксис author: {name: "john doe", email: "[email protected]"}? - person Dharma; 10.01.2013
comment
Также попробуйте <h2>By: <%= @document.author?.email or 'unknown' %></h2>, возможно, есть шаблон, в котором автор не определен. - person balupton; 17.01.2013

вы можете увидеть этот пример, теперь он отлично работает, я нашел свою проблему и хочу поделиться с вами решением:

---
  slides: 
    -
      detailimage: "heliski-img.png"
      mainimage: "heliski-g.jpg"
      title: "Powder South Heliski Guides"
    -
      detailimage: "nuevos-vientos-img.png"
      mainimage: "nuevos-vientos.jpg"
      title: "Centro Experiencial Nuevos Vientos"
---

#full-width-slider.royalSlider.heroSlider.rsMinW
  each slide in document.slides
    .rsContent
      img.rsImg(src='/slideshow/#{slide.mainimage}', alt='#{slide.title}')
      .infoBlock.infoBlockLeftBlack.rsABlock(data-fade-effect='', data-move-offset='10', data-move-effect='bottom', data-speed='200')
      p #{slide.title}
        img.rsImg(src='/slideshow/#{slide.detailimage}', alt='#{slide.title}')

важно, чтобы в каждой строке было написано «in document.slides», чтобы я мог получить доступ из нефрита к метаданным документа. :D

окончательный рендер будет выглядеть так:

<div id="full-width-slider" class="royalSlider heroSlider rsMinW">
  <div class="rsContent"><img src="/slideshow/heliski-g.jpg" alt="Powder South Heliski Guides" class="rsImg">
    <div data-fade-effect="" data-move-offset="10" data-move-effect="bottom" data-speed="200" class="infoBlock infoBlockLeftBlack rsABlock"></div>
    <p>Powder South Heliski Guides</p><img src="/slideshow/heliski-img.png" alt="Powder South Heliski Guides" class="rsImg">
  </div>
  <div class="rsContent"><img src="/slideshow/nuevos-vientos.jpg" alt="Centro Experiencial Nuevos Vientos" class="rsImg">
    <div data-fade-effect="" data-move-offset="10" data-move-effect="bottom" data-speed="200" class="infoBlock infoBlockLeftBlack rsABlock"></div>
    <p>Centro Experiencial Nuevos Vientos</p><img src="/slideshow/nuevos-vientos-img.png" alt="Centro Experiencial Nuevos Vientos" class="rsImg">
  </div>
</div>
person Francisco Javier Arenas Ulloa    schedule 05.06.2013