2014-03-13 72 views
2

我一直在與Wintersmith建立一個網站,並且很喜歡它,但是我無法將自己的頭包裹在一些內置的機制中。我開始使用添加paginator.coffee插件的「博客」框架。如何自定義wintersmith paginator?

問題需要一些細節,所以往上頂,我想要做到:

  1. 任何文件(降價,HTML,JSON元數據)將有所回升無論是在/內容/文章/ <文件>或/內容/文章/ <子目錄>/<文件>
  2. 輸出文件位於/用品/ YYYY/MM/DD /冠軍塞/
  3. /blog.html列出的所有文章,分頁。
  4. 正文/內容(不在文章中)的文件不被視爲博客文章。 Markdown和JSON元數據仍然處理,但沒有固定的URL,沒有包含在博客列表中,文件/目錄結構更直接複製。

所以,我解決了#1這個建議:How can I have articles in Wintersmith not in their own subdirectory?到目前爲止,大,和#3是工作 - 分頁的清單包括的所有帖子。 #4並不是問題,這是默認行爲。

On#2我找到了這個解決方案:http://andrewphilipclark.com/2013/11/08/removing-the-boilerplate-from-wintersmith-blog-posts/。正如作者所提到的,他的解決方案(隨後)被合併到Wintersmith master中,所以我試着只是相應地設置filenameTemplate。不幸的是,這適用於所有的內容,而不僅僅是在/ articles下,所以我網站的其餘部分變得流暢(中斷#4)。於是我嘗試了作者的方法,使用他的代碼添加了一個blogpost.coffee插件。這會將/ contents/articles中的所有文件生成爲正確的永久鏈接網址,但現在出於某種原因,paginator將不再直接在/ articles(點#1)下看到文件。

我已經嘗試了很多排列和黑客行爲。試圖改變哪個插件先被加載的順序。嘗試讓PaginatorPage擴展BlogpostPage而不是Page。試了很多東西。我終於意識到,即使在檢查Wintersmith源代碼中的許多核心類之後,我也不明白髮生了什麼。

具體而言,我無法弄清楚如何設置內容['articles'] ._。pages和.directories,這似乎是相關的。我也不理解那個下劃線是什麼。

最終,玉/ CoffeeScript的/降價是因爲當你想了解什麼是引擎蓋下發生減少編碼和提高透明度除了一個偉大的組合,你不知道這些語言。我花了一點時間來了解Jade和CoffeeScript的基礎知識(Markdown當然是微不足道的),足以跟蹤發生的事情。當我不得不深入冬天來源時,它會變得更深。我承認我也是node.js的新手,但我認爲這裏的大問題只是一個神奇的框架。例如,如果某些核心「插件」包含在骨架站點中而不是嵌入到node_modules中,那麼這樣做會很有幫助,這樣好奇的黑客就能更快地看到事物之間的互連。更詳細的文檔當然也會有幫助。理解內容樹,生成器,視圖,模板等是理解代碼流和關係在運行時是一回事嗎?我迷路了。

任何幫助表示讚賞。正如我所說,我很喜歡溫特史密斯,只是希望我能驅散魔法。

回答

2

因爲咖啡腳本是垃圾,所以這是非常難以做到的。但是,如果你願意,你可以摧毀paginator.coffee,並用簡單的JavaScript腳本,做了類似的事情替換:

module.exports = function (env, callback) { 

    function Page() { 
    var rtn = new env.plugins.Page(); 

    rtn.getFilename = function() { 
     return 'index.html'; 
    }, 

    rtn.getView = function() { 
     return function(env, locals, contents, templates, callback) { 
     var error = null; 
     var context = {}; 
     env.utils.extend(context, locals); 
     var buffer = new Buffer(templates['index.jade'].fn(context)); 
     callback(error, buffer); 
     }; 
    }; 
    return rtn; 
    }; 

    /** Generates a custom index page */ 
    function gen(contents, callback) { 
    var p = Page(); 
    var pages = {'index.page': p}; 
    var error = null; 
    callback(error, pages); 
    }; 

    env.registerGenerator('magic', gen); 
    callback(); 
}; 

注意的是,由於「咖啡腳本魔法」,也有一些例如確保從getView()返回一個緩衝區,然後'手動'重寫,而不是使用難懂的咖啡腳本擴展語義。

Wintersmith對於如何處理這些功能非常挑剔。如果未調用回調,因爲返回的值不是流或緩衝區,生成的文件將出現在內容摘要中,但不會在構建期間呈現到磁盤。啓用詳細日誌記錄並檢查「跳過foo」消息以檢測此消息。

+0

好的提示,謝謝。由於我還沒有坐下來「學習」咖啡劇本,只是好奇 - 爲什麼你說這是垃圾?太多的魔法,聽起來像? –