ランダム画像表示

ランダムに画像を表示させ、その記事へのリンクを作成するスニペット
相変わらずの自己勝手改造なので、いろいろと危ないかも。
 
元はGolbedのg_random_img.php
スニペットといっても、丸々これを利用し、スニペットにしただけ。ついでにリンクも貼れるようにしてみた。
ただ、リンクを張るには、画像ファイル名を$Prename_日付_リンク先ID.jpgなどにしないとダメなんで、超個人的利用仕様です。
MODxでの利用にあたり、ファイル名にthumbを含むファイルは除外するため、$Prenameで指定した文字列から始まるファイル名以外は表示されないようになっています。

<?php
$RandomImgSize = isset($RandomImgSize) ? $RandomImgSize : '0';
$image_w = isset($RandomImgW) ? $RandomImgW : '0';
$image_h = isset($RandomImgH) ? $RandomImgH : '0';
$imgDir = isset($imgDir) ? $imgDir : "assets/images/";
$Prename = isset($Prename) ? $Prename : "photo";
$linkNum = isset($linkNum) ? $linkNum : "2";

//g_random_img ver.0.1
//copyright 2005 Golbed
//http://golbed.main.jp/
//ディレクトリ内の画像をランダムで表示します。
//GDモジュール必須。PHP ver4.3.0以上推奨
//利用に関しては全て自己責任でお願いします。

//初期設定//

//表示する画像タイプ
//これ以外の画像を表示させる場合はカンマに続けて追加して下さい。
//例) ('gif','jpeg','jpg','png','bmp')
$image_type = array('gif','jpeg','jpg','png');

//表示サイズ固定
//0で画像にあわせる
//1でサイズ固定で表示
//$image_size = "0";

//サイズ指定(単位はピクセル)
//表示サイズ固定の場合のみ適用されます
//サイズ固定しない場合は無視されます。
//width
//$image_w = "250";
//height
//$image_h = "250";

//画像を入れるディレクトリ名。
//必要が無ければ変更しないで下さい。
//$img_dir = "assets/images/index/";


//初期設定ここまで。//
//////////////////////////////////////////



//画像一覧取得
$i = 0;
if ($dir_temp = opendir($imgDir)) {

   while (false !== ($img_file_list = readdir())) { 
       if ($img_file_list != "." && $img_file_list != ".." && $img_file_list != "index.html") { 
           $img_file_list_all[$i] .= $img_file_list ."\n";
		   $i++;
       } 
   }
   
   closedir($dir_temp); 
}


//画像の数
$image_num = count($img_file_list_all);

$error_flag = "";
$check_flag = 0;
//ファイル数が0ならチェックしない
if($image_num !== 0){
	//ファイルチェック
	//$image_typeで指定した拡張子以外のファイルが存在したらエラー
	foreach($img_file_list_all as $check_each){
		$type_tmp = strrchr($check_each,'.');


		foreach($image_type as $type_each){
			$type_tmp = strtoupper($type_tmp);
			$type_each = strtoupper($type_each);
			$type_tmp = ltrim($type_tmp,'.');
			$type_tmp = rtrim($type_tmp);

			$type_each = $type_each;
			if($type_tmp == $type_each){
				$check_flag = 1;
			}
		}
			if($check_flag == 0){
					$error_flag = "<b>エラー!画像ディレクトリ内に指定されていないタイプのファイルが存在します。</b>";
			}
			$check_flag = 0;
	}

if($error_flag == ""){
		//乱数ジェネレータ初期化
		srand (microtime()*1000000);
		shuffle($img_file_list_all);
		$ins_image = $img_file_list_all[0];
		$ins_image = rtrim($ins_image);
		$PrenameSt = '/^' . $Prename . '/';
		while ( $ins_image == preg_match($PrenameSt,$ins_image)) {
			shuffle($img_file_list_all);
			$ins_image = $img_file_list_all[0];
			$ins_image = rtrim($ins_image);
		}
		//イメージサイズ
		$i_size = "";
		if(($RandomImgSize == "1") && ($image_w == "0") && ($image_h !="0")){
                        $i_size = 'height="' . $image_h . '"';
                }elseif(($RandomImgSize == "1") && ($image_w != "0") && ($image_h == "0")){
                        $i_size = 'width="' . $image_w . '"';
                }elseif(($RandomImgSize =="1") && ($image_w !="0") && ($image_h !="0")){
			$i_size = 'width="' . $image_w .'" ' . 'height="image_h"';
		}else{
			$image_info = getimagesize($imgDir.$ins_image);
			$i_size = $image_info[3];
		}
		$imgPAGE = "";
		$imgPAGE = explode("_", $ins_image);
		$imgPAGE = $imgPAGE[$linkNum];
		if (strstr($imgPAGE,".")) {
			$Pos = strpos($imgPAGE,'.');
			$imgPAGE = substr($imgPAGE,0,$Pos);
		}
		$ins_image = '<a href="[~' . $imgPAGE . '~]"><img src="' . $imgDir . $ins_image . "\" $i_size border=0></a>";
}

	}

if($error_flag != ""){$ins_image = $error_flag;}
if($image_num == 0){$ins_image = "no image";}

echo $ins_image;
?>

スニペットコールは

[!RandomIMG!]

以下パラメータ解説
RandomImgSize
表示する画像サイズを固定するかどうか。
0 : 固定しない(デフォルト)
1 : サイズ固定する
RandomImgW
サイズを固定する場合の画像横サイズ。
指定しなかったとき、縦サイズを指定していた場合は縦幅に合わせて自動縮小される。
RandomImgH
サイズを固定する場合の画像縦サイズ。
指定しなかったとき、かつ横サイズを指定していた場合は横幅に合わせて自動縮小される。
imgDir
画像ファイルの設置場所。
初期設定はassets/images/。
最後の/まで記述すること。
Prename
表示ファイル共通の文字列。プレフィクス、だっけ?
今回はphotoから始まるファイルのみ表示させるようになっています。
linkNum
リンク先IDがどこに格納されているか。
ファイル名を"_"で切った場合、配列の何番目にリンク先IDが入るかを指定します。
デフォルトは"2"。
後でセパレータも指定できるようにしたほうがいいかなぁ。