2008-08-18 19 views
4

我的意思是自動鏈接是將頁面內容中內聯的維基鏈接生成到頁面超鏈接(如果存在)或創建鏈接(如果頁面不存在)的過程。我應該如何處理wiki頁面內容的自動鏈接?

由於我使用的解析器,這是兩個步驟 - 首先,網頁內容進行解析,所有的鏈接,從源頭上標記提取的wiki頁面。然後,在生成最終的HTML標記之前,將現有頁面的數組返回給解析器。

處理這個過程的最好方法是什麼?看起來好像我需要保留網站上每個頁面的緩存列表,而不是每次都必須提取頁面標題的索引。或者更好地檢查每個鏈接,看看它是否存在?如果列表沒有被緩存,這可能會導致很多數據庫查找。這對於擁有數千頁網站的更大維基站點是否仍然可行?

回答

1

在我自己的wiki中,我檢查了所有鏈接(沒有緩存),但我的wiki只在內部由少數人使用。你應該像這樣測試一些東西。

1

在我自己的wiki系統我的緩存系統是非常簡單 - 當網頁被更新它檢查環節,以確保它們是有效的,併爲那些沒有應用正確的格式/位置。緩存頁面作爲HTML頁面保存在緩存根目錄中。標記爲頁面更新過程中「未創建」

頁面插入保存頁面,然後鏈接到其頁面的CSV數據庫的表。

當有人創建該頁面時,它會啓動掃描以查看每個鏈接頁面,並使用正確的鏈接和格式重新緩存鏈接頁面。

如果你不感興趣,突出非創建的頁面,但是你可能只是有一個檢查看看,當您試圖訪問它創建的頁面 - 如果不是重定向到創建頁面。然後在其他文章中正常鏈接到頁面。

0

我的想法是將查詢的標題像SELECT title FROM articles和簡單的檢查,如果每個wikilink是一個字符串數組英寸如果是鏈接到頁面,則鏈接到創建頁面。

1

我試圖做一次,這是一場噩夢!我的解決方案是一個SQL過程中令人討厭的循環,我不推薦它。

有一件事給了我一個麻煩,那就是決定在多詞短語上使用什麼鏈接。假設你有一些文字說「我正在使用堆棧溢出」,你的wiki有三個頁面叫做「堆棧」,「溢出」和「堆棧溢出」......你的短語的哪一部分被鏈接到了哪裏?它會發生!

0

在我通過Markdown運行內容後,我用Sinatra(link text)製作的一個個人項目中,我做了一個gsub來替換wiki詞和其他東西(比如[[這是我的鏈接]]和其他東西) ,每次檢查頁面是否存在以及鏈接是否創建或查看依賴。

這不是最好的,但我沒有建立這個應用程序的緩存/速度的思想。這是一個資源不多的簡單wiki。

如果速度更重要,您可以將應用程序包裝在某些內容中以緩存它。例如,sinatra可以用Rack緩存包裝。

0

根據我的經驗開發Juli,這是一個離線個人的wiki有自動連接,生成靜態HTML的方式可能會解決您的問題。

如您所想,生成自動鏈接的Wiki頁面需要很長時間。但是,在生成靜態HTML情況下,只有當新添加或刪除一個wikipage時纔會重新生成自動鏈接的Wiki頁面(換句話說,它在更新wikipage時不會發生),並且可以在後臺完成「再生」操作,通常我不要緊,它需要很長時間。用戶只會看到生成的靜態HTML。

相關問題