我刚开始学编程,有一个关于导航的问题。
在文章或漫画网站中,有哪些方法可以实现“第一篇”,“上一篇”,“下一篇”和“最后一篇”的导航呢?(诚然,“第一篇”链接不会令人困惑,但其他链接呢?)
例如,在第50页,链接应该适当地指向第49页和第51页(如果存在的话,如果不存在,则不起作用,但当这样的页面存在时,它将自动变为活动状态)。
在这种情况下,我看到大多数示例的URL以“.php?id=50”结尾,但我不确定它是如何实现的,是否需要使用数据库?
任何帮助都将非常感激,谢谢。
URL末尾的那一串字符被称为GET
变量。当用户访问一个URL末尾带有该变量的页面时,例如:
example.org/comics/myawesomecomic.php?page=50
$_GET['page']
中。myawesomecomic/
的目录的内容并抓取一个名为50.html
的文件,然后将其输出给用户。但很可能您想要更复杂的东西,因为您已经费了这个劲儿,所以它会从数据库中获取第50页,并更新所有导航,甚至在左上角放置一个时尚的50-60
。$current_page = $_GET['page'];
$next_page = $current_page + 1;
$prev_page = $current_page - 1;
$first_page = 1;
$last_page =
最后一部分需要你已经知道。你可以始终拥有相同数量的页面,或者在获取当前页面时同时查询数据库等。假设你在获取当前页面时查询了数据库以获取总页数。它返回60(为避免头痛,我们假设60是从1开始的页数),那么回到导航栏...
$last_page = 60;
现在你已经拥有了第一个、最后一个、上一个和下一个。假设你知道如何处理HTML,那么除了让它看起来漂亮之外,还剩下:
echo "
<a href='myawesomecomic.php?page=$first_page'>First Page</a>
<a href='myawesomecomic.php?page=$prev_page'>Previous Page</a>
<a href='myawesomecomic.php?page=$next_page'>Next Page</a>
<a href='myawesomecomic.php?page=$last_page'>Last Page</a>
";
$query = "SELECT COUNT(*) FROM tbl";
$count = mysql_result($query, 0);
正如您所知道的,每页的项目数量和当前页,您可以计算出总共有多少页:
$perpage = 10; // This you can define yourself
$pages_count = ceil($count / $perpage);
接下来,可以使用一些简单的if语句来判断应该显示哪种导航:
// Get the current page or set default if not given
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$pages_count = ceil($count / $perpage);
$is_first = $page == 1;
$is_last = $page == $pages_count;
// Prev cannot be less than one
$prev = max(1, $page - 1);
// Next cannot be larger than $pages_count
$next = min($pages_count , $page + 1);
// If we are on page 2 or higher
if(!$is_first) {
echo '<a href="index.php?page=1">First</a>';
echo '<a href="index.php?page='.$prev.'">Previous</a>';
}
echo '<span>Page '.$page.' / '.$pages_count.'</span>';
// If we are not at the last page
if(!$is_last) {
echo '<a href="index.php?page='.$next.'">Next</a>';
echo '<a href="index.php?page='.$pages_count.'">Last</a>';
}
$query = "SELECT * FROM tbl LIMIT ".(int)($page - 1)." ".(int)$perpage;
这就是所有的内容,希望这有所帮助。
我假设你不是在谈论分页(即将大量记录拆分为多个页面),而是关于具有详细视图的记录,并提供“下一个”/“上一个”链接到下一个和上一个记录。
如果您没有固定的方法来找出前一个和后一个邻居(因此不能只说“当前ID-1”和“+1”),则必须进行按您的标准排序的数据库查询,并找出前一个和下一个成员。
也许这太深入问题了,不是你需要开始的,但我最近问了一个问题,涉及优化问题和以快速高效的方式执行此“邻居查找”的不同方法。 缓存“下一个”/“上一个元素”查询的结果
有很多方法可以做到这一点,从复杂到简单不等。(在谷歌上搜索php分页)。
一些url中的?id=50是用来确定要开始的项目。
例如,在sql中,您可以使用SELECT * FROM tbl LIMIT 0,10
来确定要选择的项目范围,这将选择记录0-10。然后SELECT * FROM tbl LIMIT 11,10
将选择11到20。
LIMIT 11, 20
将选择记录 11-30,因为 LIMIT
中的第二个参数是持续时间,而不是结束点。 - Tatu Ulmanen