2015-11-09 4 views
0

Я конвертирую старый сайт из PHP CMS в Jekyll, и я бы хотел сохранить вручную упорядоченные страницы. Первоначально я думал, что могу переименовать файлы, чтобы содержать индекс, например. 01-start-here.markdown, 02-learn-more.markdown и т. Д. Это сделало бы вещи неудобными, если бы я когда-либо добавлял страницу дальше по линии.Как я могу вручную сортировать страницы Jekyll с помощью yaml?

В идеале, я хотел бы указать файл yaml, содержащий порядок страниц. Например:

category: basics 
pages: 
    - start here 
    - learn more 
    - overview 

category: advanced 
pages: 
    - diving further 
    - wrapping up 

Возможно ли это? Глядя на Jekyll site, у них, кажется, есть сайт, упорядоченный вручную, но я не могу понять, как это сделать.

Кроме того, чтобы еще более усугубляет проблему, я хотел бы, чтобы это было назначено на pages так page.next будет автоматически переходить к advanced категории после последней страницы basics категории.

ответ

1

От Джекил кода документации

_data/docs.yml

- title: chapter 1 
    docs: 
    - home 
    - page 
    - other 

- title: Other chapter 
    docs: 
    - toto 
    - etc 

В Джекила, документация содержится в _docs коллекции, но это может быть легко адаптирована к работам со страницами.

навигация в в _includes/docs_contents.html

<div class="unit one-fifth hide-on-mobiles"> 
    <aside> 
    {% for section in site.data.docs %} 
    <h4>{{ section.title }}</h4> 
    {% include docs_ul.html items=section.docs %} 
    {% endfor %} 
    </aside> 
</div> 

_includes/docs_ul.html

{% assign items = include.items %} 
<ul> 
{% for item in items %} 
    {% assign item_url = item | prepend:"/docs/" | append:"/" %} 
    {% if item_url == page.url %} 
    {% assign c = "current" %} 
    {% else %} 
    {% assign c = "" %} 
    {% endif %} 
    {% for p in site.docs %} 
    {% if p.url == item_url %} 
     <li class="{{ c }}"><a href="{{ site.url }}{{ p.url }}">{{ p.title }}</a></li> 
     {% break %} 
    {% endif %} 
    {% endfor %} 
{% endfor %} 
</ul> 

Колонтитул предыдущая/следующая навигация в _includes/section_nav.html

{% comment %} 
Map grabs the doc sections, giving us an array of arrays. Join, flattens all 
the items to a comma delimited string. Split turns it into an array again. 
{% endcomment %} 
{% assign docs = site.data.docs | map: 'docs' | join: ',' | split: ',' %} 

{% comment %} 
Because this is built for every page, lets find where we are in the ordered 
document list by comparing url strings. Then if there's something previous or 
next, lets build a link to it. 
{% endcomment %} 

{% for document in docs %} 
    {% assign document_url = document | prepend:"/docs/" | append:"/" %} 
    {% if document_url == page.url %} 
    <div class="section-nav"> 
     <div class="left align-right"> 
      {% if forloop.first %} 
      <span class="prev disabled">Back</span> 
      {% else %} 
      {% assign previous = forloop.index0 | minus: 1 %} 
      {% assign previous_page = docs[previous] | prepend:"/docs/" | append:"/" %} 
      <a href="{{ previous_page }}" class="prev">Back</a> 
      {% endif %} 
     </div> 
     <div class="right align-left"> 
      {% if forloop.last %} 
      <span class="next disabled">Next</span> 
      {% else %} 
      {% assign next = forloop.index0 | plus: 1 %} 
      {% assign next_page = docs[next] | prepend:"/docs/" | append:"/" %} 
      <a href="{{ next_page }}" class="next">Next</a> 
      {% endif %} 
     </div> 
    </div> 
    <div class="clear"></div> 
    {% break %} 
    {% endif %} 
{% endfor %} 
+0

Это действительно отличный, подробный ответ. Огромное спасибо. – squarefrog

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