2008-08-18 18 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。

相关问题