我有一个显示数据库结果的表,我正在为它添加一些分页/导航按钮,例如'prev','next'等。这些正在构建为现在作为提交输入按钮被包装使用表单标记和一些隐藏的输入将所需的查询字符串值传递回页面本身,这意味着表单中的每个表单和元素都应具有ID属性。
现在,我想将导航添加到表格的顶部和底部,因此我将导航生成模块化为我需要时调用的单个例程。当包含多个导航栏时,这当然会导致页面中的表单和元素ID重复。
我想过将一些'count'参数传递给例程,这样在生成HTML时它可以将该值附加到ID,还有其他解决方案,例如使用全局计数器(丑陋)等,但是我想我会对人群进行民意调查,看看其他人在这种情况下做了什么。
谢谢,
保
答案 0 :(得分:1)
到目前为止你想到的解决方案中,我建议你在最后一段中首先提到的策略。传递一个查询字符串变量并加载X个记录,包括传递的数量(当然要进行错误检查,以确保一些偷偷摸摸的用户不会尝试在查询字符串中放置随机字符)将解决您的问题。
另一个选项(因为您显然正在执行从DB加载的代码隐藏)是创建会话变量并在单击链接时将值分配给 并使用它来生成列表。
对于这两个实例,当页面加载时,您可以获取当前传递的值并添加X(结果中显示的行数+1)并更改链接传递的值。
答案 1 :(得分:1)
我最近自己做了一个分页器,但是以完全不同的方式接近它。我使用php生成数字,每个数字(页面)都有一个带有href的标签,即mywebsite.php?page = x。这样你就可以使用get方法,从url中获取页码,并根据需要循环显示所显示的页数。
正如他们所说,给猫皮肤化的方法不止一种。我更喜欢url传递方法,因为我可以完全远离表单和ID,使得paginator可以去任何我决定打它的地方(无论多少次)。
这是我如何生成它的快照。希望它能给你一些想法!
/*PAGE NUMBERS*/
// ceil rounds a decimal up to the next integer
$pages=ceil(($totalrows-1)/$tablesize); //we subtract 1 from total rows because it counts 0
//(int) typecasts the $pages variable, so that it is divisible by an integer (ceil makes it a float)
$pages=(int)$pages;
//displays all the pages with their links
//if page count is less than 7 (the full paginator), display all pages
if($pages<=7){
for($i=1;$i<=$pages;$i++){
print "<a class='pages";
//add class current_page if necessary
if($page==$i){print " current_page";}
print "' href='index.php?page=";
print $i. "'>"." $i</a> "." "." ";
}
//if page count is more than 7
}else{
//if page # is less than 4, display pages up to 7, so that there are always 7 pages available (makes the buttons not jump around)
if($page<=4){
for($i=1;$i<=7;$i++){
print "<a class='pages";
//add class current_page if necessary
if($page==$i){print " current_page";}
print "' href='index.php?page=";
print $i. "'>"." $i</a> "." "." ";
}
//if page # is less than 4 away from the end, display pages $pages-7
}elseif($page>=$pages-3){
for($i=$pages-6;$i<=$pages;$i++){
//8,9,10,11,12,13,14,15
print "<a class='pages";
//add class current_page if necessary
if($page==$i){print " current_page";}
print "' href='index.php?page=";
print $i. "'>"." $i</a> "." "." ";
}
//if it's in between the ends, do this
}else{
for($i=1;$i<$pages+1;$i++){
//limit the number of visible pages to 7
if(($i>=$page-3)&&($i<=$page+3)){
print "<a class='pages";
//add class current_page if necessary
if($page==$i){print " current_page";}
print "' href='index.php?page=";
print $i. "'>"." $i</a> "." "." ";
}
}
}
}
答案 2 :(得分:1)
在我所寻找的内容中可能会出现一些混乱,但简而言之,这是一种在使用可在同一页面上多次显示的基于表单的分页解决方案时避免重复ID问题的简单方法(例如,在表格数据的上方和下方)。我的解决方案是在PHPMyAdmin分页之后对其进行建模,因为我现在只删除表单元素的ID并引用通过name属性传递的数据,这允许重复。