• 1 رای - 1 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
درخواست آموزش پيجينگ (Paging)
#1
لطفاً در مورد پيجينگ Pagination(با استفاده از پايگاه داده) آموزش دهيد. متشكرم
  پاسخ
تشکر شده توسط :
#2
خوب خیلی سادست
1 - ماتو دستورات اس کیو ال که برای MySQL طراحی شده یه چیزی داریم به نام LIMIT.
LIMIT دوتا ورودی میگیره اولیش نقطه ی شروع بعدی تعداد واکشی.به عنوان مثال :
کد پی‌اچ‌پی:
select from tbkName LIMIT 10,50 
این دستور یعنی از همه ی خروجی های دستور سلکت از شماره دهمش به اندازه 50 تا دونه جدا کن و تو خروجی نمایش بده
تکنین صفحه بندی هم همیجوری کار می کنه
پس با توجه به امکانات موجود ما ابتدا باید بیاییم و لینک هایی بسازیم که بگه کلا چند صفحه داریم و هر صفحه شمارش چنده. سپس بتونیم با توجه به شماره صفحه مقدار لیمیت رو مشخص کنیم.
من برای تعیین لینکا از این متد استفاده می کنم:
کد پی‌اچ‌پی:
    public function SetLink($tblName,$GET=NULL)
    {
        
$SQL "select count(*) from ".$tblName." ".$this->WhreSqlStatement ;
        
//include 'DataAccess/db.php';
        
$CountResualt SetReturn($SQL,"select");
        
        
$Start 0;
        
$End 0;
        
        
        if(!isset(
$_GET['Limit']))
        {
            if(
$CountResualt[0][0] > 100)
                
$End 100;
            else 
$End $CountResualt[0][0];                        
        }
        else 
        {
            
$Limit $_GET['Limit'];
            
$PartNo $Limit 100;
            if((
$Limit 100) > 49)
                
$PartNo round($PartNo,0) - 1;
            else 
$PartNo round($PartNo,0);
            
            
$Start $PartNo 100;
            
            if((
$Start 100) < $CountResualt[0][0])
                
$End $Start 100;
            else 
$End $CountResualt[0][0];
            
            if (
$Start $Start $Start 10;
            
        }
        
$S 0;
        
        if(
$Start 0)
        {
            
$S $Start 10;
        }
        
$j 1;
        
        
        if(
$GET == NULL
            echo 
"<a href='?Limit=".$Start."'> << </a> ";
        else echo 
"<a  href='".$GET."&Limit=".$Start."'> << </a> ";
        for(
$i=$S;$i<$End;$i=$i+10)
        {
            if(
$GET == NULL)
                echo 
"<a href='?Limit=".$i."'>".(($i 10)+1)."</a> ";
            else echo 
"<a href='".$GET."&Limit=".$i."'>".(($i 10)+1)."</a> ";                
        }
        if(
$CountResualt[0][0] > 100)
            if(
$GET == NULL
                echo 
"<a href='?Limit=".$End."'> >> </a> ";
            else echo 
"<a href='".$GET."&Limit=".$i."'> >> </a> ";
    } 
این متد به طور کل بررسی میکنه ببینه چندتارکرو داریم بعد میاد و اونها رو به صفحات 20 تایی مرتب میکنه.

کد پی‌اچ‌پی:
    public function SetQuery($SQL)
    {
         
$Limit "Limit ";
         if(!isset(
$_GET['Limit']))
         {
             
$Limit .= "0,10";
         }
         else 
         {
             
$Limit .= $_GET['Limit'].",10";
         }
         return 
$SQL." ".$Limit;
    } 
این متد هم باتوجه به دستور اس کیو الی که از ورودی دریافت کرده و با توجه به اینکه در خواست چه صفحه ای شده میاد و اس کیو ال مورد نظر برای اون رکورد ها رو مینویسه

نهایتش شده این کلاس :
کد پی‌اچ‌پی:
<?php
class Pagging
{
    public 
$WhreSqlStatement;
    
    public     function 
__construct()
    {}
    
    public function 
SetQuery($SQL)
    {
         
$Limit "Limit ";
         if(!isset(
$_GET['Limit']))
         {
             
$Limit .= "0,10";
         }
         else 
         {
             
$Limit .= $_GET['Limit'].",10";
         }
         return 
$SQL." ".$Limit;
    }
    
    public function 
SetLink($tblName,$GET=NULL)
    {
        
$SQL "select count(*) from ".$tblName." ".$this->WhreSqlStatement ;
        
//include 'DataAccess/db.php';
        
$CountResualt SetReturn($SQL,"select");
        
        
$Start 0;
        
$End 0;
        
        
        if(!isset(
$_GET['Limit']))
        {
            if(
$CountResualt[0][0] > 100)
                
$End 100;
            else 
$End $CountResualt[0][0];                        
        }
        else 
        {
            
$Limit $_GET['Limit'];
            
$PartNo $Limit 100;
            if((
$Limit 100) > 49)
                
$PartNo round($PartNo,0) - 1;
            else 
$PartNo round($PartNo,0);
            
            
$Start $PartNo 100;
            
            if((
$Start 100) < $CountResualt[0][0])
                
$End $Start 100;
            else 
$End $CountResualt[0][0];
            
            if (
$Start $Start $Start 10;
            
        }
        
$S 0;
        
        if(
$Start 0)
        {
            
$S $Start 10;
        }
        
$j 1;
        
        
        if(
$GET == NULL
            echo 
"<a href='?Limit=".$Start."'> << </a> ";
        else echo 
"<a  href='".$GET."&Limit=".$Start."'> << </a> ";
        for(
$i=$S;$i<$End;$i=$i+10)
        {
            if(
$GET == NULL)
                echo 
"<a href='?Limit=".$i."'>".(($i 10)+1)."</a> ";
            else echo 
"<a href='".$GET."&Limit=".$i."'>".(($i 10)+1)."</a> ";                
        }
        if(
$CountResualt[0][0] > 100)
            if(
$GET == NULL
                echo 
"<a href='?Limit=".$End."'> >> </a> ";
            else echo 
"<a href='".$GET."&Limit=".$i."'> >> </a> ";
    }
}
/*
$Pagging = new Pagging();

$Pagging->SetLink("tblAuctionBid ");
*/
?>
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط : Y.P.Y cyletech molana farokh


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان