有一个显示帖子的函数(请忽略语法错误)
function get_all_posts ($offset = 0 )
{
$q = $db->query("select * from tbl limit 10 offset $offset ");
$template->load_view('posts' , $q );
}
现在让我们假设我有一个名为get_one_post
的函数,它有一个单独的post偏移量和总posts计数作为参数
function get_one_post($requested_post_offset = 0 , $totl_posts_count = 0 )
{
}
基本上,我想在这个get_one_post
中做的是计算requested_post的页面偏移量,并调用get_all_posts
函数,这样它就显示了包含特定post 的页面
function get_one_post($requested_post_offset = 0 , $totl_posts_count = 0 )
{
$page_offset = // calculation( $requested_post_offset , $totl_posts_count );
get_all_posts ($page_offset);
}
我可以说
get_all_posts ($requested_post_offset );
但它将请求的帖子显示为页面中的第一个帖子。。。但我希望在分页中处于自然位置,而不是第一个
我应该如何做calculation
部分?
---------------------------------编辑-------------------------
请注意,我知道如何创建和实现分页。。。这不是问题所在我的框架分页系统使用偏移量而不是页码。。就像如果per_page是10,分页链接会像一样
page 1 => page.php?offset=0
page 2 => page.php?offset=10
page 3 => page.php?offset=20
在这个例子中,如果$requested_post_offset
是15页面偏移量为10我应该得到的结果
page 2 => page.php?offset=10
如果每页有m个帖子,则帖子k将在页面ceil(k/m)
上。例如,如果每页放置25个帖子,则帖子86将位于ceil(86/25) = 4
页上。
帖子在页面上的偏移量将是k%m
,其中第一个帖子的位置是0
,最后一个帖子的偏移量是m-1
。例如,86%25 = 11
,所以帖子86将是页面上的第12个。
以下是一些通常用于分页的通用公式:
total_pages = ceil(row_count / row_limit_per_page)
page_at_offset = ceil((zero_based_offset + 1) / row_limit_per_page))
zero_based_offset_for_a_given_page = (page_at_offset - 1) * row_limit_per_page
请注意,这里我将页码视为以1开头。
如果您的输入是zero_based_offset
(您感兴趣的行的零偏移)和row_limit_per_page
,那么您只需要使用最后两个等式。第一个等式通常用于显示目的(当您需要显示用于导航等的页面总数时)。