We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 32599
    • 21 Posts
    Hi,
    I’ve create a snippet that connects to a custom table with the modx database. I’m not proficient in php or modx. I got his code from http://php.about.com/od/phpwithmysql/ss/php_pagination.htm . My problem is that I can connect to the database and display all the data entries in the table but I can’t seem to get the pagination to work when I click Next for pagenumber 2 it go to the home page. Could anyone suggest anything that would help or is there a supremo coder that could modify the code to work? All help very much appreciated. Please see code below:

    <?php
    // Connects to your Database
    mysql_connect("localhost", "user", "password") or die(mysql_error());
    mysql_select_db("modx") or die(mysql_error());
    
    //This checks to see if there is a page number. If not, it will set it to page 1
    if (!(isset($pagenum)))
    {
    $pagenum = 1;
    }
    
    //Here we count the number of results
    //Edit $data to be your query
    $data = mysql_query("SELECT * FROM tblprojects") or die(mysql_error());
    $rows = mysql_num_rows($data);
    
    //This is the number of results displayed per page
    $page_rows = 5;
    
    //This tells us the page number of our last page
    $last = ceil($rows/$page_rows);
    
    //this makes sure the page number isn't below one, or more than our maximum pages
    if ($pagenum < 1)
    {
    $pagenum = 1;
    }
    elseif ($pagenum > $last)
    {
    $pagenum = $last;
    }
    
    //This sets the range to display in our query
    $max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows; 
    
    //This is your query again, the same one... the only difference is we add $max into it
    $data_p = mysql_query("SELECT * FROM tblprojects $max") or die(mysql_error());
    
    //This is where you display your query results
    while($info = mysql_fetch_array( $data_p ))
    {
    Print $info['Grant_Award'];
    echo "<br>";
    Print $info['Project_Ref'];
    echo "<br>";
    Print $info['LA_Area'];
    echo "<br>";
    Print $info['the_url'];
    echo "<p>";
    }
    echo "<p>";
    
    // This shows the user what page they are on, and the total number of pages
    echo " --Page $pagenum of $last-- <p>";
    
    // First we check if we are on page one. If we are then we don't need a link to the previous page or the first page so we do nothing. If we aren't then we generate links to the first page, and to the previous page.
    if ($pagenum == 1)
    {
    }
    else
    {
    echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=1'> <<-First</a> ";
    echo " ";
    $previous = $pagenum-1;
    echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$previous'> <-Previous</a> ";
    }
    
    //just a spacer
    echo " ---- ";
    
    //This does the same as above, only checking if we are on the last page, and then generating the Next and Last links
    if ($pagenum == $last)
    {
    }
    else {
    $next = $pagenum+1;
    echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> ";
    echo " ";
    echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> ";
    }
    ?> 

    Thank you.
      • 4172
      • 5,888 Posts
      Try this one:

      <?php
      
      //This checks to see if there is a page number. If not, it will set it to page 1
      
      $pagenum = isset($_GET['pagenum'])?$_GET['pagenum']:1;
      
      //Here we count the number of results
      //Edit $data to be your query
      $data = $modx->db->query("SELECT * FROM tblprojects");
      $rows = $modx->db->getRecordCount($data);
      
      //This is the number of results displayed per page
      $page_rows = 5;
      
      //This tells us the page number of our last page
      $last = ceil($rows/$page_rows);
      
      //this makes sure the page number isn't below one, or more than our maximum pages
      if ($pagenum < 1)
      {
      $pagenum = 1;
      }
      elseif ($pagenum > $last)
      {
      $pagenum = $last;
      }
      
      //This sets the range to display in our query
      $max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows; 
      
      //This is your query again, the same one... the only difference is we add $max into it
      $data_p = $modx->db->query("SELECT * FROM tblprojects $max");
      
      //This is where you display your query results
      while($info = $modx->db->getRow( $data_p ))
      {
      Print $info['Grant_Award'];
      echo "<br>";
      Print $info['Project_Ref'];
      echo "<br>";
      Print $info['LA_Area'];
      echo "<br>";
      Print $info['the_url'];
      echo "<p>";
      }
      echo "<p>";
      
      // This shows the user what page they are on, and the total number of pages
      echo " --Page $pagenum of $last-- <p>";
      
      // First we check if we are on page one. If we are then we don't need a link to the previous page or the first page so we do nothing. If we aren't then we generate links to the first page, and to the previous page.
      if ($pagenum == 1)
      {
      }
      else
      {
      echo ' <a href="[~[*id*]~]&pagenum=1"> <<-First</a> ';
      echo " ";
      $previous = $pagenum-1;
      echo ' <a href="[~[*id*]~]&pagenum='.$previous.'"> <-Previous</a> ';
      }
      
      //just a spacer
      echo " ---- ";
      
      //This does the same as above, only checking if we are on the last page, and then generating the Next and Last links
      if ($pagenum == $last)
      {
      }
      else {
      $next = $pagenum+1;
      echo ' <a href="[~[*id*]~]&pagenum='.$next.'"> >Next -></a> ';
      echo " ";
      echo ' <a href="[~[*id*]~]&pagenum='.$last.'"> >Last ->></a> ';
      }
      ?> 
      
        -------------------------------

        you can buy me a beer, if you like MIGX

        http://webcmsolutions.de/migx.html

        Thanks!
        • 32599
        • 21 Posts
        Thanks Bruno17,
        that’s almost working but I have to clear the cache every time I want to go to the next page or go back. The other odd thing about it is that I’ve turned Cacheable default to No in the System configuration setting and I still have to do it.Any ideas?
          • 4172
          • 5,888 Posts
          Do you call your snippet uncached?
          [!snippet....................!]


          The system-setting for cacheable is only for new created documents. To turn cached/uncached for documents that are allredy there you have to do for this documents on its own settings.
            -------------------------------

            you can buy me a beer, if you like MIGX

            http://webcmsolutions.de/migx.html

            Thanks!
            • 32599
            • 21 Posts
            Thanks Bruno17, I turned off Cacheable in the document settings and that worked.
            I call the snippet like this
            [[snippetname]]
            in the resource content area, should I be calling it like this
            [!snippetname!]
            is this the correct way to call snippets?
            I’d like to say thank you so much for rewriting the snippet. It’s a lot easier to understand how it connects and selects the table to be used.

            Cheers Bruno17 smiley
              • 32599
              • 21 Posts
              Hi Bruno17,
              I found this http://svn.modxcms.com/docs/display/MODx096/Adding+Snippets and now I understand what you mean.
              Modx is excellent, I have so much to learn but I’m very happy this is the system I’m starting out with smiley.

              Thank you Bruno17.