建立一个PHP论坛,如何在一个分页线程中链接到最后一个帖子permalink


Building a PHP forum, how to link to last post permalink in a paged thread

我正在构建一个相对简单的PHP论坛,并试图从一些主流板(如phpBB)中添加一些不错的功能。

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

我正在为每个类别和线程实现一个"lastpost"功能。我已经有了最后一篇文章的信息,因为它存储在数据库中,这不是问题所在。我想知道的是如何在一个有页面回复的帖子中链接到这篇文章,比如说每页25条。如果我的帖子是26中的第26个,你会如何编程线程进入第二页?假设我想永久链接到90篇文章中的30篇,你如何链接到第2页并确保两边的回复/页数正确?

我一直试图弄清楚phpBB是如何做到这一点的,但我想你可能会花一整年的时间把它拆开,却找不到任何地方。我看到他们将post_id作为一个额外的参数和thread_id一起传递,但我不知道他们是如何使用这些信息的。有什么出发点的想法吗?谢谢

我不知道phpBB是如何做到这一点的。但我要做的是通过它自己的ID来跟踪最后一篇帖子。对于每个permalink请求,我都会在内部"渲染"线程(只需基本内容,甚至不需要从数据库中获取帖子信息,如正文)。只需获取线程上的答案数量,然后按照您通常的逻辑将其拆分为页面。

从中,我可以很容易地找到最后一篇文章要进入的页面,而不是试图从我的一端"确保"任何事情(看看系统在做什么,不要试图让它屈从于你的意愿)——当然,这是一个相对简单的问题,重定向到该页面,并在文章和URL中附加一个HTML anchor id,这样浏览器就会自动滚动到该文章。

好吧,这是我的头顶。成熟的系统可能已经以一种更优雅的方式解决了这个问题,请随时研究并返回此处:)

您可以尝试这个例子,在一个线程上的每个页面上呈现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端,页面控件(first,next,previor,last)是表单按钮,用于提交表单和位置标识符,例如第一页X、下一页Y、上一页Z、最后一页S。。使用GET方法的url

http://example.com/forum/topic.php?id=1&cur=5&next=10&上一个=5&最后=20

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

希望它能帮助

我根据@aditya menon和@GeoPhoenix的说法提出了一个解决方案。我已经知道帖子的总数了,所以我只是把它除以每页的帖子,得到总页数。最后一篇文章总是在最后一页,所以这很容易。

挑战在于找出帖子落在帖子中间的哪一页。我运行了一个像这样的BETWEEN查询来计算一个线程中有多少帖子是

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

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

不太确定大型论坛的查询效率有多高,但它似乎能起到作用。谢谢各位