Please help with correct paging links

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • osward
    New Member
    • Oct 2007
    • 38

    #1

    Please help with correct paging links

    Hi, everyone,

    I had managed to make use of the date link from a simple calendar script to my query table. When I click on the date's link or Prev and Next Month link, The table first row will be that link's day and onwards.

    I have a problem with the page link part that it won't advance to the next page according but go back according to today's date.
    This is the calender script section[PHP] // Display Calandar
    error_reporting ('0');
    ini_set('displa y_errors', '0');
    // Gather variables from
    // user input and break them
    // down for usage in our script

    if(!isset($_REQ UEST['date'])){
    $date = mktime(0,0,0,da te('m'), date('d'), date('Y'));
    } else {
    $date = $_REQUEST['date'];
    }

    $day = date('d', $date);
    $month = date('m', $date);
    $year = date('Y', $date);

    // Get the first day of the month
    $month_start = mktime(0,0,0,$m onth, 1, $year);

    // Get friendly month name
    $month_name = date('M', $month_start);

    // Figure out which day of the week
    // the month starts on.
    $month_start_da y = date('D', $month_start);

    switch($month_s tart_day){
    case "Sun": $offset = 0; break;
    case "Mon": $offset = 1; break;
    case "Tue": $offset = 2; break;
    case "Wed": $offset = 3; break;
    case "Thu": $offset = 4; break;
    case "Fri": $offset = 5; break;
    case "Sat": $offset = 6; break;
    }

    // determine how many days are in the last month.
    if($month == 1){
    $num_days_last = cal_days_in_mon th(0, 12, ($year -1));
    } else {
    $num_days_last = cal_days_in_mon th(0, ($month -1), $year);
    }
    // determine how many days are in the current month.
    $num_days_curre nt = cal_days_in_mon th(0, $month, $year);

    // Build an array for the current days
    // in the month
    for($i = 1; $i <= $num_days_curre nt; $i++){
    $num_days_array[] = $i;
    }

    // Build an array for the number of days
    // in last month
    for($i = 1; $i <= $num_days_last; $i++){
    $num_days_last_ array[] = $i;
    }

    // If the $offset from the starting day of the
    // week happens to be Sunday, $offset would be 0,
    // so don't need an offset correction.

    if($offset > 0){
    $offset_correct ion = array_slice($nu m_days_last_arr ay, -$offset, $offset);
    $new_count = array_merge($of fset_correction , $num_days_array );
    $offset_count = count($offset_c orrection);
    } else {
    // The else statement is to prevent building the $offset array.
    $offset_count = 0;
    $new_count = $num_days_array ;
    }

    // count how many days we have with the two
    // previous arrays merged together
    $current_num = count($new_coun t);

    // Since we will have 5 HTML table rows (TR)
    // with 7 table data entries (TD)
    // we need to fill in 35 TDs
    // so, we will have to figure out
    // how many days to appened to the end
    // of the final array to make it 35 days.

    if($current_num > 35){
    $num_weeks = 6;
    $outset = (42 - $current_num);
    } elseif($current _num < 35){
    $num_weeks = 5;
    $outset = (35 - $current_num);
    }
    if($current_num == 35){
    $num_weeks = 5;
    $outset = 0;
    }
    // Outset Correction
    for($i = 1; $i <= $outset; $i++){
    $new_count[] = $i;
    }

    // Now let's "chunk" the $all_days array
    // into weeks. Each week has 7 days
    // so we will array_chunk it into 7 days.
    $weeks = array_chunk($ne w_count, 7);

    // Build Previous and Next Links
    $previous_link = "<a href=\"/modules.php?nam e=event&date=";
    if($month == 1){
    $previous_link .= mktime(0,0,0,12 ,$day,($year -1));
    } else {
    $previous_link .= mktime(0,0,0,($ month -1),$day,$year);
    }
    $previous_link .= "\"><< "._PREVMON. "</a>";

    $next_link = "<a href=\"/modules.php?nam e=event&date=";
    if($month == 12){
    $next_link .= mktime(0,0,0,1, $day,($year + 1));
    } else {
    $next_link .= mktime(0,0,0,($ month +1),$day,$year) ;
    }
    $next_link .= "\">"._NEXTMON. " >></a>";

    // Build the heading portion of the calendar table
    echo "<center>";
    echo "<table border=\"1\" cellpadding=\"2 \" cellspacing=\"0 \" width=\"300\" class=\"calenda r\">\n".
    "<tr>\n".
    "<td colspan=\"7\">\ n".
    "<table align=\"center\ ">\n".
    "<tr>\n".
    "<td colspan=\"2\" width=\"75\" align=\"left\"> $previous_link</td>\n".
    "<td colspan=\"3\" width=\"150\" align=\"center\ ">$month_na me $year</td>\n".
    "<td colspan=\"2\" width=\"75\" align=\"right\" >$next_link</td>\n".
    "</tr>\n".
    "</table>\n".
    "</td>\n".
    "<tr bgcolor=\"$bgco lor2\">\n".
    "<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>\n".
    "</tr>\n";

    // Now we break each key of the array
    // into a week and create a new table row for each
    // week with the days of that week in the table data

    $i = 0;
    foreach($weeks AS $week){
    echo "<tr>\n";
    foreach($week as $d){
    if($i < $offset_count){
    $day_link = "<a href=\"modules. php?name=event& date=".mktime(0 ,0,0,$month -1,$d,$year)."\" >$d</a>";
    echo "<td class=\"nonmont hdays\">$day_li nk</td>\n";
    }
    if(($i >= $offset_count) && ($i < ($num_weeks * 7) - $outset)){
    $day_link = "<a href=\"modules. php?name=event& date=".mktime(0 ,0,0,$month,$d, $year)."\">$d</a>";
    if($date == mktime(0,0,0,$m onth,$d,$year)) {
    echo "<td class=\"today\" >$d</td>\n";
    } else {
    echo "<td class=\"days\"> $day_link</td>\n";
    }
    } elseif(($outset > 0)) {
    if(($i >= ($num_weeks * 7) - $outset)){
    $day_link = "<a href=\"modules. php?name=event& date=".mktime(0 ,0,0,$month +1,$d,$year)."\ ">$d</a>";
    echo "<td class=\"nonmont hdays\">$day_li nk</td>\n";
    }
    }
    $i++;
    }
    echo "</tr>\n";
    }

    // Close out your table and that's it!
    echo '<tr><td colspan="7" class="days"> </td></tr>';
    echo '</table></center>';
    echo "<br>";[/PHP]This is my query to the database table[PHP] // sort table colum
    $sort_order = 'date asc';
    if( isset( $_GET['order']) ){
    $order = $_GET['order'];
    switch ($order) {
    case "A_date":
    $sort_oredr = 'date asc';
    break;
    case "D_date":
    $sort_order = 'date desc';
    break;
    case "A_place":
    $sort_order = 'place asc';
    break;
    case "D_place":
    $sort_order = 'place desc';
    break;
    }
    }

    $d = date("Y-m-d", $date); // this will return today's date as calendar
    $where_field = "date >= '$d'";

    // Set max number of row for Paging tableORDER by".$sort_order ."
    $max_results = 15;
    if(!isset($_GET['page'])){
    $page = 1;
    } else {
    $page = $_GET['page'];
    }
    $from = (($page * $max_results) - $max_results);
    $result = $db->sql_query("SEL ECT * FROM ".$prefix."_eve nt_cat WHERE $where_field ORDER by $sort_order LIMIT $from, $max_results") or die("Error: " . $db->sql_error()) ;
    if($db->sql_numrows($r esult) == 0){
    echo(""._NODATA ."");
    }[/PHP]and finally this is my paging link section[PHP] // Page Numbering
    $total_results = mysql_result($d b->sql_query("SEL ECT COUNT(*) as date FROM ".$prefix."_eve nt_cat WHERE $where_field"), 0);
    $total_pages = ceil($total_res ults / $max_results);
    $sort_order = $_GET['order'];
    // Build Previous Link
    echo "<center>";
    if($page > 1){
    $prev = ($page - 1);
    echo "<a href=\"/modules.php?nam e=event&page=1& order=$sort_ord er\"><img src=\"images/dl_arrow.gif\" alt=\""._FIRST. "\" title=\""._FIRS T."\" border=\"0\"></a> ";
    echo " <a href=\"/modules.php?nam e=event&page=$p rev&order=$sort _order\"><img src=\"images/l_arrow.gif\" alt=\""._PREV." \" title=\""._PREV ."\" border=\"0\"></a> ";
    }
    for($i = 1; $i <= $total_pages; $i++){
    if(($page) == $i){
    echo "&nbsp;[$i]&nbsp;";
    } else {
    echo "<a href=\"/modules.php?nam e=event&page=$i &order=$sort_or der\">&nbsp;$i& nbsp;</a> ";
    }
    }
    // Build Next & Last page Link
    if($page < $total_pages){
    $next = ($page + 1);
    echo " <a href=\"/modules.php?nam e=event&page=$n ext&order=$sort _order\"><img src=\"images/r_arrow.gif\" alt=\""._NEXT." \" title=\""._NEXT ."\" border=\"0\"></a> ";
    $last = $total_pages;
    echo " <a href=\"/modules.php?nam e=event&page=$l ast&order=$sort _order\"><img src=\"images/dr_arrow.gif\" alt=\""._LASTPA GE."\" title=\""._LAST PAGE."\" border=\"0\"></a>";
    }
    echo "</center>";
    echo "<br>";[/PHP]
    line 106 of the 1st section of code : is the link created by the calendar script
    line 21 of the 2nd section of code : is where I define and convert the date to put into the query

    Please help me to make the paging link work along with the date link from the calendar.

    Also I would like to have the calendar go along with the page link when the page advance to the next month, the calender would change to the next month accordingly.

    Thanks in advance
  • pbmods
    Recognized Expert Expert
    • Apr 2007
    • 5821

    #2
    Heya, Osward.

    What do you want your code to do? Give an example.
    What is your code doing that you don't want it to do? Give an example.
    What is your code *not* doing that it is supposed to? Give an example.

    Comment

    • osward
      New Member
      • Oct 2007
      • 38

      #3
      Originally posted by pbmods
      Heya, Osward.

      What do you want your code to do? Give an example.
      What is your code doing that you don't want it to do? Give an example.
      What is your code *not* doing that it is supposed to? Give an example.
      Hi, pbmods

      What I had achieve is:
      using the link in the calendar that my table can display the row necessary. ie, If I click September 3, 2007, The query returns September 3, 2007 and rows onward.

      What I don't want it to do is:
      if user click the Next page as the above had been returened. It display the 2nd page of the default query. That is, SELECT * FROM mydb_tbl $where_field.
      The var $where_field is define on line 21,22 of my 2nd portion of the code posted
      which $date is from line 9, of the calender code

      What I want to do is:
      The page will display the 2nd page of page starting from September 3, 2007. Also as the page moves forward, the calander display will follow as well. If the follow of calender display is too much of a trouble, I can live with it but I definitely need the page move forward correctly

      Comment

      • osward
        New Member
        • Oct 2007
        • 38

        #4
        In addition to my yesterday's post. I follow the method to maintain the sort_order in my previous post. I think I have to $_GET(date) from the url that add date=$where_fie ld to the page link. There are 2 problems that I immediately encounter.

        1. I had already use the $date to convert to $t = date("Y-m-d", $date) and put it in my $where_field for the start of any query to the database, which was fine to start with. The problem is if I add date=$where_fie ld at the page link, it returns the 2007-11-09, not unix timestamp. (Think I can convert back to unix timestamp before subsistue back to the link)

        2. I had to make the $where_field return a unix timestamp to date= $where_field that is equal to the number of rows to display per page (assume one day a row of display), and the increment of the value of limited rows per page at the link, and so on. ie, page link would be &page=$i&date=$ where_field
        example:
        limit rows per page $limit_rows = 15
        $date = mktime(0,0,0,11 ,01,2007) - the initial query date or date from the url
        The 1st $where_field = mktime(0,0,0,11 ,01+(1*15),2007 )
        The 2nd $where_field = mktime(0,0,0,11 ,01+(2*15),2007 )
        In (1*15), 1 is number of page which should be $i, 15 is the no.of rows to limit
        If I put $where_field = mktime(0,0,0,da te('m'),date('d '+($i*$limit_ro ws),date('y'))
        All the subsquence page links display the 1st increment but not loop through like $i
        I am not sure how I could make this happens

        Any help would be greatly appreciated

        Thanks in advance

        Comment

        Working...