PX : code

Split Bar by Fabien HADDADI
Download this code

This module prints a common split href menu, like those used to 
display into several pages the results of a search engine. 

For example, you have a page results.php3 that prints a collection 
of results, and for more convenience you want to write several pages 
from this result, each grouping MAXHIT results. So you paste this code 
into a file split.php3, then you write in results.php3: include("[...]/split.php3"); 
at the exact location where you want the split bar to display. 

Don't forget to modify your results page results.php3 to display 
only the results i to i+MAXHIT-1 ! 

A live example can be seen at http://tropicalm.free.fr/pub/world/gallery/gallery.php3 

Code of split.php3: 

arguments: _maxelmt: number of elements in the collection 
  MAXHIT :  number of max hits for a page 
  p :  current page to be seen 
  cat (optional): optional parameters to send at return 

/*if MAXHIT=0 print a message error*/ 

if(!$MAXHIT) { 
    print "MAXHIT=0 : no split available!\n"; 

else { 
    if($res && $_maxelmt) { 
    if($_maxelmt < $p*$MAXHIT) 
     print "\t\t&nbsp;Results ".(max(1,($p-1)*$MAXHIT+1)).'-'.$end.'&nbsp;&nbsp;<br>'."\n"; 

    /*bypass if there's no more than one page*/ 
    if ($_maxelmt> $MAXHIT) { 
            /* pattern: Results i'-i'+MAXHIT [<<Prev] | 1 --page+1 [2 --page+2 ...] | [Next>>] Page i of n */ 

            /*if p > 1, Prev is active, otherwise it's not*/ 
            print "\t\t<font face='Arial' size='1'"; 

            if (!($p-1)) { 
                print " color='#646464'>&lt;&lt;Prev&nbsp;|&nbsp;\n"; } /*light gray*/ 
            else { 
                $anurl = "results.php3?_maxelmt=$_maxelmt&MAXHIT=$MAXHIT&p=$prevpage&$cat"; 
                print " color='#008000' ><a href=$anurl>&lt;&lt;Prev</a>&nbsp;|&nbsp;\n"; } 
                print "\t\t</font>"."\n"; 
                    /*print a page number every MAXHIT*/ 
                for($i=0;$i<$_maxelmt;$i+=$MAXHIT) { 
                /*page number i+1*/ 
                  /*don't activate current page's href*/ 
                  if($pi==$p) { 
                      print "<font face ='Arial' size='1' color=#646464>$pi&nbsp;"; 
                else { 
                        $anurl = "results.php3?_maxelmt=$_maxelmt&MAXHIT=$MAXHIT&p=$pi&$cat"; 
                    print "<font face ='Arial' size='1' color=#008000 >\n"; 
                    print "\t\t<a href=$anurl>".$pi.'&nbsp;</a>'."\n"; 
                print "\t\t</font>"."\n"; 
            /*if p*MAXHIT doesn't meet or exceed MAXHIT, Next is active, otherwise it's not*/ 
            print "\t\t<font face ='Arial' size='1'"; 

            if (($_maxelmt-$p*$MAXHIT) <= 0) { 
                print " color='#646464'>| Next&gt;&gt;\n"; } /*light gray*/ 
            else { 
                 $anurl = "results.php3?_maxelmt=$_maxelmt&MAXHIT=$MAXHIT&p=$nextpage&$cat"; 
                 print ">|&nbsp;<a href=$anurl>Next&gt;&gt;</a>\n";} 
                print '</font>'; 

        if($_maxelmt) { 
            print "\t\t<font face ='Arial' size='1' color='#008000' >&nbsp;Page ".$p.' of '.ceil($_maxelmt/$MAXHIT).'</font>'."\n"; 
    } /*if ($_maxelmt> $MAXHIT)
} /*end lse if(!$MAXHIT)*/

Example of use in results.php3: 9 hits maximum, in a 3*3 table 

Note: the colspans of <td> may not be correct as I adapted this example 
from another presentation 

/*place here your code to query MySQL database...*/ 

/*get results*/ 

/*maximum number of hits*/ 
$MAXHIT= 9; 

/*if more than MAXHIT results are found, split the results into several pages*/ 

/* --> $p is initialized to 0 if results.php3 is 1st called, but then it gets its value 
from split.php3!*/ 

print " <table border='0'>\n"; 
print "   <tr>\n"; 
print "     <td>\n"; 
  /*remind query or show a sorry message if no result was found:*/ 
  print "Your query: $qry.\n"; 
print "     </td>\n"; 
print "  </tr>\n"; 

if($number) { 
    print "\n\t  <tr>\n"; 
    print "\t    <td'>\n"; 
    if($number>1) { 
          /*split header*/ 
    else { 
    /*displays details about results*/ 
    print "\t\t$number result$plural $pluralbe found for this query\n"; 
    print "\t\t<hr size='1'>\n";  print "\t    </td>\n";  print "\t  </tr>\n"; 
    print "\t  <tr>\n"; 
    print "\t    <td>\n"; 

    /*category of result page to show when returning from split module*/ 
    $cat="[optional parameters]"; 
    /*calling split module*/ 
     "http://[your path]/split.php3?$urlinfo&res=1"; 

    print "\t  <tr>\n"; 
    print "\t    <td>\n"; 

    print "\t\t<table border='0' cellspacing='1' cellpadding='1'>\n"; 

    /*default recordset scanning is 0 to MAXHIT-1 (p=1)*/ 

    while ($i<$MAXHIT*$p && $i < $number) { 
        /*format table*/ 
        if (!($i % 3)) { 
            print "\t\t  <tr>\n"; 
        $mName="$mVar1/$mVar2.html"; /*for instance...*/ 

        print "\t\t    <td>\n\t\t\t<a href='$mName'>\n"; 
           print "</a>\n\t\t    </td>\n"; 

            if (($i % 3) == 2) { 
            print "\t\t  </tr>\n"; 
        /*next record*/ 
    } /*end while*/ 
    /*if table didn't end in a full row, append end of row*/ 
    if ($i % 3) { 
                 print "\t\t  </tr>\n"; 
    print "\t\t</table>\n"; 
    print "\t    </td>\n"; 
    print "\t  </tr>\n"; 
} /*end if $number*/ 
else { 
    print "\t  <tr>\n"; 
    print "\t    <td>\n"; 
        /*sorry message*/ 
        print "\t\tSorry, no result was found in the database\n"; 
    print "\t    </td>\n"; 
    print "\t  </tr>\n"; 

print " </table>\n"; 

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.