Видимость переменных посредника в config.rb и на страницах

Я что-то упускаю из виду в отношении видимости переменных. В моем config.rb я использую структуру данных для создания динамических страниц:

    @pages = [
    {
      id: "cookies",
      title: "Happy Chocolate Chip Cookies", 
      quote: "These cute cookies are full of sweet chocolate and ready to give you energy!",
      content: "Orecchini a monachella. Realizzati in fimo, dipinti a mano e rivestiti con vernice lucida."
    },
    ....]



 @pages.each do |p|
    page "/creations/#{p[:id]}.html", :proxy => "item-template.html", :ignore => true do 
      @tile = p
    end
  end

Генерация страниц проходит нормально, с этим проблем нет. Но..

Как я могу получить доступ к этой структуре данных, чтобы предоставить динамические ссылки на сгенерированные страницы? Я хотел бы иметь возможность создать индексную страницу (назовем ее creatives.html) со следующим кодом:

    <ul>
    <% @pages.each do |tile| %>
        <li><a href="creations/<%= tile[:id]%>.html">
            <%= tile[:title] %>
        </a></li>
    <% end %>
</ul>

person Marek Maurizio    schedule 26.02.2012    source источник


Ответы (2)


Нет необходимости создавать собственный помощник, вы можете использовать файл данных yaml для заполнения вашего шаблона и создания списка ссылок. Позволь мне объяснить.

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

  • строить
  • источник
  • данные

Внутри этого создайте файл с именем «pages.yml» (например).

Этот файл должен быть специально отформатирован, поэтому будьте осторожны (или используйте анализатор yaml, чтобы убедиться, что у вас нет ошибок - например, пропущенная запятая или экранированная кавычка).

Используя данные в вашем файле config.rb, пример будет примерно таким:

- id: "cookies"
  title: "Happy Chocolate Chip Cookies"
  quote: "These cute cookies are full of sweet chocolate and ready to give you energy!"
  content: "Orecchini a monachella. Realizzati in fimo, dipinti a mano e rivestiti con vernice lucida."

 - id: "bacon"
   title: "Smoked bacon bits"
   quote: "everything tastes better with bacon!"
   content: "blah"

так далее...

Теперь в файле config.rb замените @pages.each do |p| на data.pages.each do |p|.

data.pages.each перебирает каждый элемент во вновь созданном файле yaml

Затем вы можете просто сослаться на тот же файл в вашем индексном файле (creations.html) следующим образом:

<ul>
  <% data.pages.each do |tile| %>
    <li><a href="creations/<%= tile[:id]%>.html">
       <%= tile[:title] %>
    </a></li>
  <% end %>
</ul>

У меня была аналогичная проблема с динамическими страницами, на которые вы можете ссылаться здесь.

Надеюсь это поможет. Удачи!

person Tom Gillard    schedule 14.07.2013

Возможно, добавьте помощника, который возвращает структуру данных @pages в вашем файле creations.erb. т.е. в вашем файле config.rb добавьте:

helpers do
  def dynamic_pages()
    @pages
  end
end

а затем в вашем creations.erb есть:

<ul>
  <% dynamic_pages.each do |tile| %>
    <li><a href="creations/<%= tile[:id]%>.html">
       <%= tile[:title] %>
    </a></li>
  <% end %>
</ul>

И, если вы хотите ссылаться на динамические страницы на своих динамических страницах (!), помощник может сгенерировать этот html, и вы можете вызвать ... нет, неважно!

person mm2001    schedule 27.02.2012