0

我正在构建一个相对简单的 PHP 论坛,并尝试添加一些来自 phpBB 等主流板的不错的功能。

数据库结构是简单的 3 表方法。类别、主题和帖子。

我正在为每个类别和线程实现“最后一篇文章”功能。我已经有了最后的发布信息,因为它存储在数据库中,这不是问题。我想要解决的是如何在一个有分页回复的线程中链接到这篇文章,比如每页 25 个。如果我的帖子是 26 篇文章中的第 26 篇,你将如何编写线程以转到第二页?假设我想永久链接到 90 个中的 30 个,您如何链接到第 2 页并确保两边的回复/页面数量正确?

我一直在试图弄清楚 phpBB 是如何做到的,但我认为你可以花一整年时间把它撕开,却无处可去。我看到他们将 post_id 作为带有 thread_id 的附加参数传递,但我无法弄清楚他们如何使用该信息。有什么想法可以作为起点吗?谢谢。

4

3 回答 3

0

我不知道 phpBB 是如何做到这一点的。但我要做的是通过它自己的 ID 跟踪最后一篇文章。对于每个永久链接请求,我会在内部“渲染”线程(只是准系统,甚至不需要从数据库中获取诸如正文之类的帖子信息)。只需获取线程上的答案数量,然后按照通常的逻辑将其分成页面即可。

由此,我可以很容易地找出最后一篇文章进入哪个页面,而不是试图从我的角度“确保”任何事情(看看系统在做什么,不要试图按照你的意愿弯曲它) - 然后,当然,这是一个相对简单的重定向到该页面,并将 HTML anchorid 附加到帖子和 URL 以便浏览器自动滚动到该帖子。

嗯,这不是我的想法。成熟的系统可能会以更优雅的方式解决它,请随时研究并在这里发帖:)

于 2012-07-08T11:47:13.183 回答
0

你可以试试这个例子,在一个线程的每个页面上呈现 5 个帖子,有 20 个帖子
查询

// get the first 5 posts<br/>
SELECT posts FROM topics WHERE topicid = 1 LIMIT 0,5

// get the next five posts<br/>
SELECT posts FROM topics WHERE topicid = 1 LIMIT 5,10

在 php 方面,页面控件(第一个、下一个、上一个、最后一个)是表单按钮,用于提交表单和位置标识符,例如第一页 X、下一页 Y、上一页 Z、最后一页 S .. 使用 GET 方法的 url

http://example.com/forum/topic.php?id=1&cur=5&next=10&previous=5&last=20

这种关于跟踪用户的信息在主题中,可以存储在会话中或使用 POST 方法提交

希望它有所帮助

于 2012-07-08T11:49:42.813 回答
0

我提出了一个基于@aditya-menon 和@GeoPhoenix 所说的解决方案。我已经知道帖子总数,所以我只是将其除以每页的帖子以获得总页数。最后一篇文章总是在最后一页,所以这很容易。

挑战在于确定帖子位于线程中间的哪个页面。我已经运行了BETWEEN这样的查询来计算特定帖子中有多少帖子进入线程

SELECT COUNT(post_id) FROM posts 
WHERE topic_id = $TOPIC_ID AND post_id BETWEEN 0 AND $POST_ID

然后将每页的帖子除以这个数字,并ceil()给出帖子所在的页码。

不太确定该查询对于大型论坛的效率如何,但它似乎可以完成这项工作。多谢你们

于 2012-07-08T16:59:56.187 回答