オレオレGyazoギャラリーのソース公開

プログミング

おれおれGyazo用にギャラリーページを作ったのでその解説っぽいのを。
PHPは素人なので、まだ無駄がある筈だけど、動いているから気にしないスタイル。

機能としては、ざっくりと以下。

  • 画像の更新日時で降順にソート
  • 画像以外は処理しない
  • 画像の一部を表示してサムネイル(のように)表示
  • ページング処理
  • サムネ風画像をクリックでlightbox表示

という事でギャラリーのソースをどーん。
解説部分は主にソース内のコメント。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>gallery</title>
	<link rel="stylesheet" href="css/gallery.css" type="text/css" />
	<link rel="stylesheet" href="lightbox/css/lightbox.css" type="text/css" media="screen" />
	<script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
	<script type="text/javascript" src="lightbox/js/lightbox.min.js"></script>
	<script type="text/javascript" src="js/gallery.js"></script>
</head>
<body>
<h1 class="ttl">Gyazo 一覧</h1>
<div class="canvas">

<?php
	// 画像のディレクトリ指定
	$imgdir = opendir("./images"); // 画像の置いてあるパス
	while(false!==($file = readdir($imgdir)))
	{
		// 面倒なので画像ファイル名にパスをくっつけておく
		if ( is_file ( "./images/$file" ) )
		{
			$files[] = "./images/$file";
		}
	}
	
	// ソート用
	$sortWork = array() ;
	
	$i = 0 ;
	foreach ( $files as $name )
	{
		//$sortWork[N] の [0]にファイル名、[1]にファイル更新日
		$sortWork[$i][0] = $name ;
		// ファイルの更新日時を取得
		$sortWork[$i][1] = date("Y/m/d H:i", filemtime( $name )) ;
		$i++ ;
	}
	 
	// $sortWork をファイルの更新日時でソート
	usort($sortWork, "usrt") ;
	
	// ファイルの数をカウントしておく
	$cnt = count($sortWork);
	
	$nowPage	= $page = empty($_GET["p"]) ? 1 : $_GET["p"];	// 現在ページ判定
	$viewCnt	= 20;											// 1ページの最大画像数
	$maxPage	= ceil($cnt/$viewCnt);							// 総画像数からページ数を求める
	$start		= ($nowPage - 1) * $viewCnt;					// 画像カウンタの開始位置
	
	// 画像出力
	if ( $cnt != 0 && $nowPage <= $maxPage )
	{
		print "<ul id='gallery'>";
		for ( $i = $start; ($i < $start+$viewCnt) ; $i ++ )
		{
			if ( $i >= $cnt )
			{
				break;
			}
			// 画像かどうかを調べて画像以外はスキップ
			if( exif_imagetype ( $sortWork[$i][0] ) != false )
			{
				print "<li class='thumb'><a href='".$sortWork[$i][0]."' data-lightbox='g'><img src='".$sortWork[$i][0]."' /></a><span class='uploadDate'>".$sortWork[$i][1]."</span></li>\n";
			}
		}
		print "</ul>\n";

		// ページャ
		$limit = 10;
		print '<div id="pagerContainer" class="clearfix"><ul class="pager">'."\n";
		// 最初のページ
		if ( $nowPage > ( $limit / 2 ) )
		{
			print '<li><a href="?p=1">New</a></li>'."\n";
			print '<li>|</li>'."\n";
		}
		// 途中。表示ページ数は 10 として、それを超える場合は前後を…表示として省略
		for ( $pc = $nowPage - ( $limit / 2 ) < 1 ? 1 : $nowPage - ( $limit / 2 ) ; $pc < $nowPage; $pc ++ )
		{
			print '<li><a href="?p='.$pc.'">'.$pc.'</a></li>'."\n";
		}
		
		print '<li><span>'.$nowPage.'</span></li>';
		
		for ( $pc = $nowPage + 1; $pc < $nowPage + ( $limit / 2 ) && $pc <= $maxPage; $pc ++ )
		{
			print '<li><a href="?p='.$pc.'">'.$pc.'</a></li>'."\n";
		}
		
		// 最後のページ
		if ( $nowPage <= $maxPage - ( $limit / 2 ) )
		{
			print '<li>|</li>'."\n";
			print '<li><a href="?p='.$maxPage.'">Old</a></li>'."\n";
		}
		print "</ul></div>\n";
	}
	else
	{
		print '<p>画像データがありません!</p><a href="?p=1">ギャラリートップ</a>';
	}
	print "<hr >";
?>
</div>
</body>
</html>

<?php
// ==============================================================
// functionName			usrt
// 引数					$a,$b共に二次元配列
// 処理					USORT用 ソートは 配列の[N][1] で実施する
// ==============================================================
function usrt( $a, $b )
{
	if ( strtotime( $a[1]) > strtotime($b[1]) )
	{
		return -1;
	}
	else if ( strtotime($a[1]) < strtotime($b[1] ) )
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

?>

初めてjQueryを使用したので、そのリンクも入れています。
プラグインでlightbox2を使用しています。
自前のjQueryは、画像へのマウスホバーで更新日時を表示する箇所。
もうちょっとマシなコードが掛けるようになったら書き直すかもしれないけど、当面は私的利用のみなのでこのまま突っ切るつもりではある。

タイトルとURLをコピーしました