2013-09-23 3 views
3

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

Файловая структура

src/ 
    index.hbs 
    posts/ 
    post-1.hbs 
    post-2.hbs 
    post-3.hbs 

Ниже это почти то, что я ищу.

<section> 
{{#each pages}} 
    <article> 
    <header> 
     <h2>{{data.title}}</h2> 
    </header> 
    {{page}} 
    </article> 
{{/each}} 
</section> 

Что мне не хватает?

ответ

3

Извините за быстрый и грязный ответ, я хотел бы получить его здесь как можно быстрее. Я очищу его через день или два. (2013-09-26)

После работы над этим я закончил создание помощника Handlebars, который я мог бы использовать в шаблоне index.hbs. С этим я заканчиваю тем, что ниже приведенный шаблон Handlebars для index.hbs.

index.hbs

--- 
title: Home 
--- 
<p>I'm a dude. I live in Stockholm, and most of the time I work with <a href="http://www.gooengine.com/">Goo</a>.</p> 

<section> 
    {{#md-posts 'src/posts/*.*'}} 
    <article> 
    <h2>{{title}}</h2> 
    {{#markdown}} 
     {{{body}}} 
    {{/markdown}} 
    </article> 
    {{/md-posts}} 
</section> 

Структура папок

src/ 
    index.hbs 
    posts/ 
    post-1.hbs 
    post-2.hbs 
    post-3.md // <--- Markdown with Handlebars 

Gruntfile.coffee

assemble: 
    options: 
    flatten: true 
    layout: 'layouts/default.hbs' 
    assets: 'public/assets' 
    helpers: 'src/helpers/helper-*.js' 
    root: // this is my target 
    src: 'src/*.hbs' // <--- Only assemble files at source root level 
    dest: 'public/' 

SRC/хелперы/хелперы-MD-posts.js

Этот помощник выражение Глоб, читает файлы, извлекает вводная YAML, компилирует источник тела, и, наконец, добавляет все это к контексту блока рули. Помощник - это несколько неправильных имен, так как на самом деле он не компилирует Markdown ... поэтому приветствуются предложения об именах.

var glob = require('glob'); 
var fs = require('fs'); 
var yamlFront = require('yaml-front-matter'); 

module.exports.register = function(Handlebars, options) { 

    // Customize this helper 
    Handlebars.registerHelper('md-posts', function(str, options) { 

    var files = glob.sync(str); 
    var out = ''; 
    var context = {}; 
    var data = null; 
    var template = null; 

    var _i; 
    for(_i = 0; _i < files.length; _i++) { 
     data = yamlFront.loadFront(fs.readFileSync(files[_i]), 'src'); 

     template = Handlebars.compile(data.src); // Compile the source 

     context = data; // Copy front matter data to Handlebars context 
     context.body = template(data); // render template 

     out += options.fn(context); 
    } 

    return out; 
    }); 

}; 

Смотреть все в этом репо: https://github.com/marcusstenbeck/marcusstenbeck.github.io/tree/source

+1

эй @Marcus, хорошая работа на помощника и найти решение этой проблемы. Для имени помощника, как насчет 'inline'? так как это технически то, что вы делаете. также если вы хотите сделать запрос на перенос с помощью этого помощника в библиотеку [handlebars-helers] (https://github.com/assemble/handlebars-helpers), я был бы рад объединить его. – jonschlinkert

+0

@jonschlinkert, вы предлагаете переименовать из _md-posts_ в _inline_? Я был бы рад сделать запрос на получение, и это также будет мой первый вклад с открытым исходным кодом. Сегодня хороший день. :) – marcusstenbeck

+0

«переименовать из md-posts в строку» правильно. :-) Мы дружная толпа, я был бы рад помочь, если у вас возникнут вопросы с вашим первым вкладом! – jonschlinkert

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