PHP分页和排序

问题描述:

我目前正在开发一个内部CMS,并且已经陷入停顿。我试图很容易地在博客文章的页面之间进行分页,而不能决定如何处理。真正的问题只出现在我需要允许用户选择每页显示多少结果或排列帖子的顺序时。PHP分页和排序

我最初的想法是简单地使用查询字符串:blog/?page=3&count=20&sort=date但我不确定这种方法是否会对SEO产生不利影响。

例如,谷歌是否理智地认识到blog/?page=3&count=20blog/?count=20&page=3相同?

然后我想到了使用会话,但是这又不能解决上述问题,并且可能会使情况变得更糟,因为有些用户可能没有启用Cookie。

最后,我已经使用mod_rewrite的一些网址,最好是使用这样的结构:blog/1/20/

我真的可以做一些帮助/建议在这里,似乎并没有一个硬性和快速分页结果的方式。

在此先感谢

只要这些查询字符串是出现在网站上的链接(通过静态的,正常的“寻呼”,这是spiderable链接)不应该有任何不良影响。但是,如果您的分页通过会话进行,可能会产生影响,因为这通常是通过Cookie或长查询字符串传播的会话ID完成的。据我所知,参数顺序并不重要,只要它们从服务器获得相同的输出即可。

简单的GET查询字符串分页方法很好地工作。谷歌也这样做(例如:q = test & start = 10 & ...),关键是要确保所有东西都可以通过纯朴的锚点到达。

如果您计划您的网站满意地爬行,请避免使用querystrings。

相反,使用mod_rewrite和查询这样的:

blog/page:3/count:20/sort:date 

这将使其更具可读性,同时保持查询字符串的方式进行。

当然,在进行实际查询之前,您必须解析它,但这在PHP中很简单:使用explode()分隔URI的每个部分,然后从那里解析。

考虑没有固定参数的顺序,而是允许它们被交换和省略,这将为您在构建链接时提供更大的灵活性。

我一直这样做,通过会话变量,通过ajax调用设置。

我为每个列标题设置了一个onClick事件,并将该页面的内容封装在一个div中,以便我可以替换它。

我不希望Google下载同一页面的10个不同版本。

+0

但是,您如何迎合禁用Cookie的用户?或JavaScript关闭了? – Rowan 2009-10-14 06:24:55

关于你提到的会话变量评论:

我当时想过使用会话,但同样这并没有解决上述问题,并有可能使一些用户可能没有启用Cookie情况变得更糟。

会话变量存储在服务器上而不是客户端上,所以禁用cookie不会影响会话变量。

如果你想避免谷歌重复问题,会话变量可能是解决这个问题最简单也是最可靠的方法。

+0

我知道会话变量存储在服务器上,但会话ID仍然需要存储在客户端(在cookie或查询字符串中) – Rowan 2009-10-14 06:26:37