2011年3月24日木曜日

PHPでページングの作り方

*****ページングとは?******
ブログ等で10ページの記事があったとすると、
その10ページ中で、現在見ているページが何ページにあたるかを表示したりします。
また、その現在見てるページの次のリンクを表示したり、戻るリンクを表示したりします。


******ソース*******
ちょっと作ったんでアップします。

<?php


$max = 5;//1ページあたりの表示数
$count;//記事の数が配列が代入されます

$logdata = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");

$count = count($logdata);//記事数をカウント
$limit = ceil($count/$max);//最大ページ数
$page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号がなければ1、あればそのままで

//記事の配列を表示
for($i = 0 ; $i < count($logdata) ; $i++) {
    print "[".($i+1) ;
    print $logdata[$i]."]";
}

function disp_page($page,$max){
    global $logdata,$count;
    $start = ($page == 1)? 0 : ($page-1) * $max;
    $end   = ($page * $max);
  

    print "<p>";
    print "count:".$count."<br>";
    print "max:".$max."<br>";
    print "start:".$start."<br>";
    print "end:".$end."</p>";
    print "<p>";
    for($i=$start;$i<$end;$i++){
        if($i>= $count){break;}
        print $logdata[$i]."<br>";
    }
    print "</p>";
    }
  

disp_page($page,$max);
paging($limit, $page);
function paging($limit, $page, $disp=5){
    //$dispはページ番号の表示数
    $next = $page+1;
    $prev = $page-1;
    //ページ番号リンク用
    $start =  ($page-floor($disp/2)> 0) ? ($page-floor($disp/2)) : 1;//始点
    $end =  ($start> 1) ? ($page+floor($disp/2)) : $disp;//終点
    $start = ($limit <$end)? $start-($end-$limit):$start;//始点再計算
    if($page != 1 ) {
         print '<a href="?page='.$prev.'">« 前へ</a>';
    }
    //最初のページへのリンク
    if($start>= floor($disp/2)){
        print '<a href="?page=1">1</a>';
        if($start> floor($disp/2)) print "..."; //ドットの表示
    }
    for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ
        $class = ($page === $i) ? ' class="current"':"";//現在地を表すCSSクラス
      
        if($i == $page){print "<b>";}//現在のページは大文字で表示
            if($i <= $limit && $i> 0 ){//1以上最大ページ数以下の場合
                print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示  
            }
        if($i == $page){print "</b>";}//現在のページは大文字で表示
    }
          
    //最後のページへのリンク
    if($limit> $end){
        if($limit-1> $end ) print "...";    //ドットの表示
        print '<a href="?page='.$limit.'">'.$limit.'</a>';
    }
    if($page <$limit){
        print '<a href="?page='.$next.'">次へ »</a>';
    }
    /*確認用
    print "<p>current:".$page."<br>";
    print "next:".$next."<br>";
    print "prev:".$prev."<br>";
    print "limit:".$limit."<br>";
    print "start:".$start."<br>";
    print "end:".$end."</p>";*/
}

?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" >
<input type="text" name="page" value="">
<input type="submit">
</form>


わたしの教科書的に本です


2011年3月21日月曜日

より良いPHPerにならないための20Tips

今日、大変今後の役にたつサイトを見つけました。

http://anond.hatelabo.jp/keyword/YAML


「より良いPHPerにならないための20Tips」

2011年3月19日土曜日

Ruby を全面的に採用した東京ガスの地震防災システム

「Ruby を全面的に採用した東京ガスの地震防災システム」
がはてなブックマークに掲載されていたのでチョット見てみました。

http://www.slideshare.net/ossaj/ruby-6029382

地震等で供給を停止する時間が
2400分
から
10分
Rubyに移行後なったそうです、、、、

今後Rubyが来るのかもしれません。