2010-09-10 27 views
0

比方說,我報廢了我的老WordPress安裝,我把在/公共(Sinatra的應用程序)以下目錄如何渲染舊wordpress帖子的sinatra中的類似檔案結構?

2006  2008  2010  category my-work 
2007  2009  archives tag 

年目錄下去格式爲:

/年/月/日/問題1: 我可以獲取/year/month/day/title-of-post/index.html加載頁面,但我希望能夠加載/年/月/月/ day/title-of-post /加載頁面,而不必在最後鍵入index.html。

問題2:

我希望能夠輸入/歸檔並獲得上述的每一個子目錄的<li><a href="path-to-archived-post">post title</a></li>。我該怎麼做呢?

回答

1

您有獲取的index.html在您的公用文件夾,幾個選項。最快的選擇是讓您的負載平衡服務器(例如Nginx或Apache)爲靜態文件提供服務。 Nginx和Apache基本上是這樣開箱的。

另一種方法是手動讀取併發送來自Sinatra路線的文件。你會以這種方式獲得更多的控制權,但會失去一點速度並使用更多的內存。你可能是這樣做的:

get "/:year/:month/:day/:title" do |*path| 
    File.read(File.join(settings.public, path, "index.html")) 
end 

您可以用Dir類通配符讓你的文章列表:

get "/archive" do 
    @posts = Dir["#{settings.public}/**/index.html"].map do |post| 
    File.dirname(post).sub(settings.public, "") 
    end 

    haml :archive 
end 
+0

你的岩石謝謝。 – 2010-09-11 23:27:15

+0

我想知道如果你可能知道一個解決方案,刪除所有將返回「/ 2009/06」的項目(基本上是空的目錄,只是指向另一個級別的職位)。 – 2010-09-11 23:28:35

+0

它應該已經忽略空目錄(或者至少不包含index.html文件的目錄)。如果你想排除特定的目錄,即使它們包含index.html文件,你也可以拋出一個拒絕塊並拒絕任何以特定字符串開頭的路徑:'@ posts.reject! {| d | d =〜/^\/2009 \/06 /}'。 – 2010-09-13 04:58:45

0

1.

get "/:year/:month/:day/:title" do 
    # render the post 
end 

2.

get "/archive" do 
    years = Dir.entries(PUBLIC_DIR) 
    # cycle through years and render links 
end 
相關問題