设计分页界面的最佳方法


Best Way to Design a Paged Interface

我正在创建一个网站,该网站将以页面上列出的文章(及其内容)为特色。想想博客风格吧。然而,我认为在一个页面上完全显示50篇文章会有点可笑,所以我想知道自动将其划分为页面的最佳方式是什么

我正在使用PHP和MySQL从数据库中获取文章。

一些可以与其他内容混合和匹配的建议。

  1. 查询X篇文章。在页面底部有一个指向下一个X号的链接,该链接查询从显示的最后一篇文章之后开始的X号文章。确切的代码取决于你如何组织,但本质上只需要将X篇文章称为1页的内容,然后给你的动态页面一个值,让它从一个偏移量开始
  2. 如果你有很长的文章,使用一些ajax,甚至只是很好的老式javascript来"扩展"文章,那就特别好了。将它们的显示限制在第一段左右,然后有一个"阅读更多"按钮来显示文章的其余内容。如果它嵌入在页面中并用css和javascript隐藏/显示,它仍然会被搜索引擎索引
  3. 可能比以前更好的SEO目的。把每一篇文章放在自己的页面上,让你的文章列表只显示第一段左右,并带有"阅读更多"链接,带你进入完整的文章页面。这可能更可取,因为a)它很容易(KISS总是一个很好的方法)b)它在不混合关键字的情况下为您的网站提供了更多独特的页面(有利于SEO)c)文章可以直接轻松地从其他网站链接到(有利于搜索引擎优化)

只是一些想法。做任何事情都没有"最好"的方法,只有在上下文中更有意义的方法。

统计当前类别中的文章数量,

将总额除以每页的金额,得到总页数。

从mysql中选择每页金额的文章,其中id>(pagenum*每页金额)

创建导航链接。

示例查询:

$sql = "SELECT * FROM articles ORDER BY date ASC LIMIT 0, 20"; // This will return the first 20
$sql = "SELECT * FROM articles ORDER BY date ASC LIMIT 40, 20"; // This will return 40-60

注意:这被称为分页,以备将来参考/搜索。这里有很多好的例子,还有一些框架可以帮你处理这个问题。

简单教程:http://www.phpfreaks.com/tutorial/basic-pagination

我不专门使用PHP,但这样做的一般策略是将查询设计为根据每页所需的项目数和应跳过的项目数进行动态限制。换句话说,您的SQL遵循以下几条线:

$stmt = $mysqli->prepare("SELECT id, title, createdDate FROM tArticles ORDER BY createdDate desc LIMIT :skip, :itemsPerPage");

如果您按页码跟踪,您的:skip-bind参数将通过获取当前页码(从0开始)并乘以每页的项目数来导出。

您可能也应该看看这个问题的答案,以避免在绑定之前需要将变量强制转换为整数的潜在常见陷阱。

我记得有一次我看了一下Blogger是如何做到这一点的,这很有趣

它是这样的:

  • 有一个默认的post-timestamp(应该是最新的帖子)
  • 有一个默认的display-per-page(大约10-20)
  • 然后从post-timestamp开始在DB上进行搜索将搜索限制为display-per-page
  • 将搜索最后一篇文章的post-timestampdisplay-per-page一起提供给"下一个"链接