• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کلاس pagination - صفحه بندي
#1
Lightbulb 
سلام دوستان
امروز نشستم يک کلاس pagination براي نوشتم .
قابليت خوشکل و با حالي که اين کلاس داره اينه که اگه مثلاً صفحه بنديتون 100 تا بشه اين شماره صفحات رو بطور خلاصه نشون ميده
يعني مثلاً اگه 100 صفحه داشته باشين و تنظيمات limit اين کلاس رو روي 3 بذارين و توي صفحه مثلاً 8 باشين اينو نشون ميده

1 - 2 - 3 -...- 7 - 8 - 9 -...- 98 - 99 - 100

کار limit رو گرفتين چيه يعني سه تا سه تا جدا کنه
حالا اگه limit=4 باشه اينجوري ميشه

1 - 2 - 3 - 4-...- 6 - 7 - 8 - 9 -...- 97 - 98 - 99 - 100

خلاصه خودم اين نوع صفحه بندي رو نياز داشتم ، گذاشتم شمام استفاده کنيد .
يه سري توضيحات
all تعداد کل مطالب هست مثلاً 1500 تا
range تعداد مطالب در هر صفحه هست مثلاً 10 تا
inpage شماره صفحه فعلي هست که توش هستين حالا مثلاً $_GET['page']
limit هم که گفتم بخش بندش هست . اگه اينو برابر null بذاريد کل صفحات کلي نشون داده ميشن و بخش بخش نميشن
url هم آدرس صفحه ايست که اون عدد آخرش ميشينه مثلاً بذاريد http://mysite.ir/?page= خودش عدد صفحه رو ميذاره آخرش
after_url اينم مثلاً رشته اي که بخوايد بعد از لينک بذاره مثلاً بنويسيد .html که آخر url بعد از عددصفحه ميذارتش (فکر نکنم لازمتون بشه !)

اينم يه پيشنمايش با چند تا مثال
[عکس: page.png]

اينم خود کلاس
کد پی‌اچ‌پی:
<?php
# Pagination (PHP5)
#
# pakage:     Reza CMSpro
# date:     1390-2-26
# version:     2.0
# author:     Reza Sh (www.RezaOnline.Net/Blog)
# email:     [email protected]
# license:     gpl

class pagination{

    private 
$all     =     0;        // select count(id) from post where status=publish
    
private $range     =    10;        // max post per page
    
private $inpage    =    0;        // current page
    
private $url=    '';            // url of page like http://mysite.com/page-
    
private $after_url =    '';    // character for end of url like .html
    
private $limit       null;    // make limit like 3 show 1 , 2 , 3 , ... , 5 , 6 , 7 , ... , 18 , 19 , 20
    
    // for example : http://mysite.com/page-1.html
    
            /**
        * construct func
        * get pagenumbers config
        *
        * @param $conf array 
        */
    
function __construct($conf=null)
    {
        if(!
is_array($conf))
            return 
'';
            
            if(isset(
$conf['all']) && !empty($conf['all']))
                
$this->all $conf['all'];
            
            if(isset(
$conf['range']) && !empty($conf['range']))
                
$this->range $conf['range'];
            
            if(isset(
$conf['inpage']) && !empty($conf['inpage']))
                
$this->inpage $conf['inpage'];
            
            if(isset(
$conf['url']) && !empty($conf['url']))
                
$this->url $conf['url'];
            
            if(isset(
$conf['after_url']) && !empty($conf['after_url']))
                
$this->after_url $conf['after_url'];
                
            if(isset(
$conf['limit']) && !empty($conf['limit']))
                
$this->limit $conf['limit'];
    }
        
/**
    * Return str class=inpage where page num is in page
    *
    * @access    private
    * @param $i int
    * @param $inpage string
    * @return string
    */
    
private function inpage($i,$inpage)
    {
        if(
$i==$inpage)
            return 
' class="inpage"';
        return 
'';    
    }
    
        
/**
    * check the number zoj or fard
    *
    * @access    private
    * @param $i int
    * @return bool
    */
    
private function is_zoj($int=1)
    {
        if(
$int%==0)
            return 
true;
        return 
false;
    }
    
        
/**
    * show page numbers
    *
    * @access    public
    * @return string - list of page numbers
    */
    
public function pagenumber()
    {
    
$inpage $this->inpage;
    
$limit =$this->limit;
    
$maxitem ceil($this->all/$this->range);
    
$last_end $maxitem $limit;
        
$i $fir_out $sec_out 0;
        
            
// start of pagenumber
      
$out="\n<ul class='pagenumber'>\n";
      if(
1<$inpage )    
        
$out.='<li><a href="'.$this->url.'1'.$this->after_url.'" target="_self" rel="nofllow" >نخست</a></li>'."\n".'<li><a href="'.$this->url.($inpage-1).$this->after_url.'" target="_self" rel="nofllow" >قبلی</a></li>'."\n";
    
            
//loop of pagenumber
      
while ($i<$maxitem)
      {
        
$i++;
            if(
$limit === null or ($i<=$limit) or ($i>$last_end) or ($i==$inpage) or ($i$inpage-ceil(($limit)/2) and $i $inpage+ceil(($limit)/2)) or ($this->is_zoj($limit) and $i>= $inpage-ceil(($limit)/2) and $i $inpage+ceil(($limit)/2)) )
                
$out.='<li'.$this->inpage($i,$inpage).'><a href="'.$this->url.$i.$this->after_url.'" target="_self" rel="nofllow" >'.$i.'</a></li>'."\n";
            elseif(
$i>$limit && ((!$this->is_zoj($limit) and $i<$inpage-(($limit)/2) ) or ($this->is_zoj($limit) and $i<$inpage-($limit/2)) ))
                
$fir_out++;
            elseif(
$i<=$maxitem-$limit &&( (!$this->is_zoj($limit) and $i>$inpage-(($limit-1)/2)) or ($this->is_zoj($limit) and $i>$inpage+($limit/2)-1) ))
                
$sec_out++;
            else
                continue;
                            
                
//show doted
                
if($fir_out ===and ( (!$this->is_zoj($limit) and $i<$inpage-(($limit)/2)) or ($this->is_zoj($limit) and $i<$inpage-($limit/2)) ) )
                    
$out.='<li class="dotedli">...</li>';        
                elseif(
$sec_out===&&( (!$this->is_zoj($limit) and $i>$inpage-(($limit-1)/2) ) or ($this->is_zoj($limit) and $i>$inpage+($limit/2)-1) ) && $i<$maxitem-$limit+1)
                    
$out.='<li class="dotedli">...</li>';
                else
                    continue;
                        
             }
             
// end of pagenumber
    
if($maxitem>$inpage )    
        
$out.='<li><a href="'.$this->url.($inpage+1).$this->after_url.'" target="_self" rel="nofllow" >بعدی</a></li>'."\n".'<li><a href="'.$this->url.$i.$this->after_url.'" target="_self" rel="nofllow" >آخر</a></li>'."\n"

        
$out.="</ul>\n<div style='clear:both'></div>";        
            if(
$i===1)
                return 
'';
        return 
$out;
    }
    
    
    function 
__destruct()
    {
        
// end
    
}
}






//==== Usage ====\\
?>
<style type='text/css'>
.pagenumber li{
  float:right;
  display:inline-block;
   margin:2px 1px 1px 2px;
  background:white;
  border:1px solid #D8CAAF
}
.pagenumber  li:hover{
  background:#FFE0A8;
}
.pagenumber a{
  display:inline-block;
    padding-top:2px;
  padding-bottom:2px;
  padding-right:6px;
  padding-left:6px;
  font-family:tahoma;
  text-decoration:none;
  font-size:8pt;
}

li.inpage{
  background:#E6DCCA;
}

.pagenumber .dotedli{
    border:none;
    background:white
}
.pagenumber .dotedli:hover{
    border:none;
    background:white 
}

</style>
<meta http-equiv='Content-type' content='text/html;charset=utf-8' />
<?php
$pageconf 
= array(
'all'=>200 ,     // select count(*) from post where 
'range'=>10 ,     // select * from post limit inpage*range,range
'inpage'=>20,    // current page. example 4_GET['page']
'limit'=>,    // use number of li for minimize
'url'=>'http://localhost/workshop/pagination.php?page=' // url of page. the number showed in end of url
);

$pagenumber = new pagination($pageconf);

echo 
$pagenumber->pagenumber(); 



راستي نزديک کنکورم دعام کنيد ! Smile

-----
آپدیت :
عرض از مزاحمت اینجا گذاشتمش
https://pagination4php.codeplex.com/
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
#2
کنکور که با دعا درست نمی شه Big Grin
  پاسخ
تشکر شده توسط : Reza
#3
من که یه دعای گنده ی گنده میکنم Tongue
ایشالا یه جای توپ قبول شی Big Grin
فقط شیرینی نباید یادت بره Blush
W H A T E V E R   Sleepy 
  پاسخ
تشکر شده توسط : Reza
#4
تو واسه شکم خودت دعا کردی یا کنکور رضا ؟!!! Big Grin
  پاسخ
تشکر شده توسط : Reza
#5
(۱۳۹۱ اردیبهشت ۲۶, ۱۲:۱۱ ب.ظ)oia نوشته: تو واسه شکم خودت دعا کردی یا کنکور رضا ؟!!! Big Grin

فک کنم لو رفتم Big GrinTongueBig Grin
W H A T E V E R   Sleepy 
  پاسخ
تشکر شده توسط : oia Reza
#6
نقل قول:فقط شیرینی نباید یادت بره
نگاه کن چه جوری انگیزه ما رو واسه کنکور خراب میکنه . شیطونه میگه بیخیال کنکور شم .

نقل قول:فک کنم لو رفتم
Big Grin

نقل قول: کاربر تشکر کننده! فکنم از بس تشکر کرده دگمه تشکر خراب شده و آلرت میده واسه همینه
آره همش یه قلب قرمز شده .Heart
ویندوزم هنگ میکنه .Big Grin

حالا در کل نظرت در مورد این کلاسی که نوشتم چیه ؟ خوبه بده زشته باحاله ! میصرفه؟ نمیصرفه ؟ دختر بهش میدن ، نمیدن؟
خلاصه شما استاد مایی دیگه ! نظرت ما رو به شوق میادهCool
منتظریم
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : oia
#7
نقل قول:حالا در کل نظرت در مورد این کلاسی که نوشتم چیه ؟ خوبه بده زشته باحاله ! میصرفه؟ نمیصرفه ؟ دختر بهش میدن ، نمیدن؟
خلاصه شما استاد مایی دیگه ! نظرت ما رو به شوق میاده
خب یکم منتظز بمون تا بگم Big Grin

1#
کد کلاس رو در یک فایل همنام کلاس ( اختیاری-باپسوند class.php.) قرار بده و مثال ها رو از کد کلاس جدا کن.
جدا از قرار دادن سورس کلاس در پست اون رو به صورت یک فایل به پست ضمیمه کن
Big Grin
  پاسخ
تشکر شده توسط : Reza shgninc
#8
ادامه ندیم ؟ Smile
  پاسخ
تشکر شده توسط : Reza
#9
رضا جان کلاست عالی بود Heart
بی ربط نوشت یک:
(۱۳۹۱ اردیبهشت ۲۹, ۱۲:۱۸ ب.ظ)oia نوشته: ادامه ندیم ؟ Smile
در مورد تولدت که فرداست؟ Angel
خلاصه همینجا اعلام میکنم که مبارکهBig Grin


بی ربط نوشت دو:دارم رو یه پلاگین دانلود پولی از سایت با امکان شارژ پنلی کار میکنم ،نظرت چیه؟خوبه ؟بده؟میصرفه؟نمیصرفه؟زن بهش میدن،نمیدن؟ Tongue

اللهم صل علی محمد و آل محمد و عجل فرجهم

افلاطون را گفتند چرا هرگز غمگین نمیشوی؟
گفت :دل برآنچه نمی ماند،نمی بندم.
  پاسخ
تشکر شده توسط : Reza
#10
نقل قول:در مورد تولدت که فرداست؟
نه 5 دی هست . از روی پروفایل خوندی فکر کنم اشتباه زدمBlush

نقل قول:ادامه ندیم ؟
میگوشم !Big Grin
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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