问题
there i have created a program with a tab button and page number. all functions are almost working properly until i noticed one tiny problem. as we all know, tabs always highlights the current tab you are in. let us say if your tabs are A-Z letters and a # that means home or mainpage, and your # is the current page, and the main pages consist of the list of employees registered in your database. since i have page number (Next and Previous), i have limited the amount or number of employee names/information by 5 stating that only 5 records should appear on the screen.
note: my code is working, but 1 problem slipped. everytime i clicked on the next button to see the other list of employees,the # tab is not highlighted wherein its suppose to still be highlighted since you are in the same page. Does anyone knows what cause this and how to fix it? im sorry if it is not that clear since it is so hard to explain.
example:(IMAGINE THIS AS THE WINDOW) let us say the limit is = 2
**#** A B C D E F G H I J K L M N O P Q R S T U V W X Y Z //this is the tabs button, notice the # is highlighted employee_id : employee_name : employee_age 1 chel 26 2 brandon 35 **PREV** **NEXT** //this is the page number
when i try to click next to view the next employee in the main page, the page looks like this:
# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z //notice the # is NOT highlighted after you click next employee_id : employee_name : employee_age 3 charlie 28 4 sasha 24 **PREV** **NEXT**
i hope i cleared up my problem in this simple illustration. i hope someone could help me. thanks
//this is my tabs codes
<?php
function toc_menu($current){
$return ='<ol id="toc">
'."\n";
$return .= ($current=='') ? '<li class="current"><a href="index.php?namelist=%"><span>#</span></a></li>'."\n" : '<li><a href="index.php"><span>#</span></a></li>'."\n";
foreach(range('a','z') as $link){
$return .= ($current==$link) ? '<li class="current"><a href="index.php?namelist='.$link.'"><span>'.strtoupper($link).'</span></a></li>'."\n" : '<li><a href="index.php?namelist='.$link.'"><span>'.strtoupper($link).'</span></a></li>'."\n";
}
$return .="</ol>\n";
return $return;
}
if(isset($_GET['namelist']))
{
$current=$_GET['namelist'];
}
else
{$current='';
}
//echo where you want the menu
if(isset($_GET['namelist'])) {
echo toc_menu(strtolower($_GET['namelist']));
$tocmenu = toc_menu(strtolower($_GET['namelist']));
} else {
echo toc_menu(strtolower(''));
}
//or hold it in a variable to display later on
?>
//and this is my page_number codes:
<?php if ($offset>=1)
{ // bypass PREV link if offset is 0
$prevoffset=$offset-$limit;
print "<a href=\"".htmlentities($_SERVER['PHP_SELF'])."?offset=$prevoffset&searchfile=$search&namelist=$listname\"/>Prev</a> ";
}
echo '</td>
<td colspan ="5" height ="20" align="right"';
// check to see if last page
if (!($offset+$limit > $total))
{
// not last page so give NEXT link
if ($offset == 1)
{
$newoffset=$offset+($limit-1);
}
else
{
$newoffset=$offset+$limit;
}
print "<a href=\"".htmlentities($_SERVER['PHP_SELF'])."?offset=$newoffset&searchfile=$search&namelist=$listname\">Next</a> ";
}
?>
TAKE NOTE: My variable namelist is used for the A-Z variable the searchfile is for my search button MisaChan
回答1:
After struggling with this long piece of code the only thing that i see that can be causing an issue is $listname
if listname is not a letter your code will not work.
here is what i suggested, since your code is not sorted alphabetically you should consider using numbers instead. A-Z will be 1 to 10 or 1 to total pages
it makes much more sense,
here is a class that i use to handle pagination easily
class Pagination {
public $current_page;
public $per_page;
public $page_count;
public function __construct($page=1,$per_page= 15, $total_count=0) {
$this->current_page = $page;
$this->per_page = $per_page;
$this->total_count = $total_count;
}
public function offset() {
return ($this->current_page -1)* $this->per_page;
}
public function total_pages () {
return ceil($this->total_count/ $this->per_page);
}
public function previous_page () {
return $this->current_page -1;
}
public function next_page () {
return $this->current_page +1;
}
public function has_previous_page () {
return $this->previous_page() >= 1? true : false;
}
public function has_next_page () {
return $this->next_page() <= $this->total_pages()? true : false;
}
// edit this section to suit your needs
public function format_output ($link,$query) {
if ($this->total_pages() > 1) {
$output = "<div id=\"pagination\"><p>";
$output .= ($this->has_previous_page())? ("<a href=\"/$link/".$this->previous_page()."/{$query}\" >Previous</a>"): "";
$c = $this->current_page;
$t = $this->total_pages();
for ( $i = 1; $i <= $t; $i++ )
{
if ($this->current_page == $i) {
$output .= " <a class=\"active\" href=\"#\" >{$i}</a> ";
}else {
$output .= " <a href=\"/$link/{$i}/{$query}\" >{$i}</a> ";
//$output .= " <a href=\"$link?q={$query}&page={$i}\" >{$i}</a> ";
}
}
$output .= (($t ==$this->total_pages())?"":' ... ');
$output .= ($this->has_next_page())? ("<a href=\"/$link/".$this->next_page()."/{$query}\" >Next</a>"): "";
$output .= "</p></div>";
}else {
$output = "<div id=\"pagination\"><p>Displaying all results.</p></div>";
}
return $output;
}
}
?>
and here is how i use it.
// your listname in numbers
$currentPage = isset($_GET['currentPage'])? $_GET['currentPage']: 1; // page number
$limit =2; // you decided to limit 2 per page
$total = 10; // the total result available in all pages
$pagination = new Pagination($currentPage, $limit,$total);
// if you need the the value of how many to offset for the current page
$offset = $pagination->offset(); // example page 6 will return 12
// and to display the pagination simply echo this
echo $pagination->format_output(htmlentities($_SERVER['PHP_SELF']),'other values u want to pass');
This will automatically create the previous and next button for you
I hope this will help you solve your problem
来源:https://stackoverflow.com/questions/6106153/problems-with-current-tab-and-page-numbers-in-php