อาทิตย์, กุมภาพันธ์ 05, 2555
   
Text Size
ป้ายโฆษณา

การทำ Pagination ใน Frontend (J1.0)

( 2 Votes )

การแสดงผลแบบแบ่งหน้าเป็นสิ่งจำเป็นที่เราต้องใช้อยู่เสมอในการเขียนโปแกรมทั้งส่วนของ Frontend และ Backend ซึ่งท่านที่มีประสบการณ์เขียนมาบ้างคงพอจะทำได้อย่างง่ายๆ ซึ่งการแสดงผลแบบแบ่งหน้าจะมีการการจำกัดการแสดงผลต่อหน้า เช่น 50 รายการต่อหน้า และมีการแสดง Link ให้ click เพื่อดูการแสดงผลในส่วนที่เหลือ ดูรูปที่ 1 โดยในการทำ Pagination นี้เราจะมีการใช้งาน class ของ Joomla! ตัวหนึ่ง คือ mosPageNav ดูตัวอย่าง

  1. function listSipAccount( $option, $limitstart, $limit ) {
  2.  global $mosConfig_absolute_path, $mainframe, $asterdb, $Itemid;
  3.  require_once ($mosConfig_absolute_path.DIRECTORY_SEPARATOR."includes".DIRECTORY_SEPARATOR."pageNavigation.php");
  4.  //getUserStateFromRequest not work in frontend
  5.  //$search = $mainframe->getUserStateFromRequest("search{$option}", "search","");
  6.  $search = strval(mosGetParam($_REQUEST, "search", "") );
  7.  $search = strtolower(trim( $search ));
  8.  $mainframe->setPageTitle( "SIP account list" );
  9.  $total = asterProvHelper::totalSipAccounts( $search );
  10.  $pageNav = new mosPageNav( $total, $limitstart, $limit );
  11.  $rows = asterProvHelper::listSipAccounts($pageNav->limitstart, $pageNav->limit, $search);
  12.  HTML_asterProv::showAccountList($option, $Itemid, $rows, $pageNav, $search);
  13. }
 

ใน function นี้มีตัวแปรที่เราต้องใช้สองตัวคือ $limitstart และ $limit ซึ่งเป็นตัวแปรที่ได้จาก mosPageNav โดยในการใช้งาน mosPageNav จะมีตัวแปรอีกตัวหนึ่งก็คือ $total เป็นจำนวน record ที่มีทั้งหมดเพื่อใช้ในการแบ่งหน้า

$total            จำนวน record ทั้งหมดก่อนการแบ่งหน้า ซึ่งเราต้องทำการ query จากฐานข้อมูล ในที่นี้ผมใช้ Static class ในการ query จำนวน record
$limitstart       record ที่ต้องการให้เริ่มแสดง หน้าแรกคือ ศูนย์
$limit              จำนวนรายการต่อหน้า

  1. $limit        = intval( mosGetParam( $_REQUEST, 'limit', 50 ) );
  2. $limitstart  = intval( mosGetParam( $_REQUEST, 'limitstart', 0 ) );
 


ในส่วนของการแสดงผล (HTML) ผมขอยกมาบางส่วนนะครับ
  1.  
  2.  function showAccountList($option, $Itemid, &$rows, &$pageNav, &$search) {
  3.   HTML_asterProv::showToolbar();
  4.   $complink = "index.php?option=$option";
  5. ?>
  6.   <form name="adminForm" method="post" action="index.php?option=<?php echo $option?>&Itemid=<?php echo $Itemid?>">
  7.   <table width="100%">
  8.   <tr>
  9.    <td width="30%"><?php echo "Display ".$pageNav->writePagesCounter() ?></td>
  10.    <td width="30%">Search account <input type="text" name="search"
  11. value="<?php echo $search?>" onchange="document.adminForm.submit();" class="inputbox" /></td>
  12.    <td width="20%">Display per page <?php echo $pageNav->writeLimitBox($complink); ?></td>
  13.   </tr>
  14.   </table>
  15. //...................
  16.   <?php
  17.   echo "<br /><div>".$pageNav->writePagesLinks($complink)."</div>";
  18.   HTML_asterProv::showFooter()
  19.  }
 

โดยในส่วนของ method ที่สำคัญผมขอใช้รูปอธิบายแล้วกันนะครับ pagenav.png

JoomlaWatch Stats 1.2.8b_12-dev by Matej Koval
Restore Default Settings