#author("2021-03-25T08:21:54+09:00","","")
*randimg2.inc.php(Pukiwikiプラグイン) [#z9403145]
***randimgのサンプル出力 [#c7233cf3]
画像サイズを2パターン用意しました。ファイルは2しかありません。
#randimg2(450x300,XXXXX.jpg);
***randimg2のテスト(出力サイズを変更した実行結果) [#e474b7fa]
#randimg2(350x200,XXXXX.jpg);
***質問 [#t086d436]
指定したフォルダに入ってる画像をランダムに表示させたいのですが、いい方法はないでしょうか?
指定したフォルダに入ってる画像をランダムに表示させたいという要望です。
***回答 [#te989c52]
普通に特定のディレクトリを検索して特定の拡張子のファイルをつかまえ、ランダムにひとつ抜き出して中身が本当に画像なのかをチェックして、出力するというPHPスクリプトを個別に書くのが一番軽いと思います。
乱数以外の基本的な手法についてはrefプラグインのソースがそのまま使えると思います。
「特定のページに添付されたファイルの中から」という場合は、refプラグインの改造でいけると思いますよ。
attachよりも軽いです。
** filerandimg2.inc.phpをどう設置する? [#nd8790e1]
ああ、同一ページに多数置くなら、
function randimg2_get_image( $page)
{
static $img;
if ( $img == '' ) {
foreach ( glob(RANDIMG2_SEARCHDIR.'*.*') as $afile ) {
if (preg_match('/\.(jpe?g|png|gif|bmp)$/i',$afile)) {
$img[] = basename($afile);
}
}
list($usec) = explode(' ',microtime());
srand($usec*100000000);
}
return RANDIMG2_BASEURL.$img[rand(0,count($img)-1)];
}
とした方が良いかもしれないです。
ニーズが「画像ファイルを1000枚くらい置きたい(入れ替えの簡便さも暗に含む)」というという事ですので、PukiWikiの機能を使わないこと(最初のコメント)も念頭に置いた方がいいですよ
出来るだけ短く済ます、プラグインを書換えなくとも多少は体裁変更等が可能、管理者以外に大したことは出来ない、そういう条件で考えたらこうなりました。この程度のPukiWiki機能利用はご容赦を。
-+- [pukiwiki] + COPYING.txt
| + README.en.txt.gz
| …
| + wiki.en.tgz
|
+- [img] + image1.jpg
+ image2.jpg
…
のようなディレクトリ構成だとして、PukiWikiのURLが
http://example.org/pukiwiki/pukiwiki.php
だとすると、
//RANDIMG2_SEARCHDIR → ../img/
RANDIMG2_SEARCHDIR → ./img/
RANDIMG2_BASEURL → http://example.org/img/
です。末尾の'/'は省略しないで下さい。
これで分からなければ、設置しているPukiWikiのURL、表示したい画像の 内一つのURLを教えてください。
追伸、先頭部のコメント
// ページ名が省略された場合は、現在のページ
は消し忘れです。意味はありません。オプションに関しては、このプラグインは
#randimg(300x200,ランダム画像)
とすれば
#ref(http://example.org/img/XXXXX.jpg,300x200,ランダム画像)
と等価(勿論XXXXX.jpgはランダムに変化する)な出力が得られるものですので、 refプラグインのヘルプを見てください。
'not found.'は、対象となる画像ファイルを一つも発見できなかった場合、 refプラグインに渡す前に出力されるので、RANDIMG2_SEARCHDIRの指定を 誤っているものと思われます。
画像が表示されず、代替テキストのみの場合は、その画像が閲覧 可能なものであるならば、RANDIMG2_BASEURL設定の問題です。
pukiwiki付属のロゴとかで
-+-pukiwiki.php
+-[images] +img01.jpg
+img02.jpg
をテストしようとしてたので
// 検索ディレクトリ指定 (絶対、あるいはpukiwiki.phpのある場所からの相対)
define( RANDIMG2_SEARCHDIR, './image/');
// 検索ディレクトリのURL
define( RANDIMG2_BASEURL, 'http://example.org/image/');
として解決しました。
//