このページでは、 Relmに取り付ける拡張ツールや、 Relmで応用してできる小技などについて、いくつか紹介しています。 ほかにも、アイデアさえあれば結構いろいろできると思いマス。
お絵描きツール、しぃペインターの紹介は、次のページの お絵描きツール, しぃペ のページをご覧ください。
ここで、Relmの機能を拡張するツール・ライブラリなどを紹介。追加したファイルは、relm.ini の @librarys に入れてくれるといいかと。拡張設定の一番下のところです。
サンプル板で使ってるやつ。スキンいくつか作るひととか、あったら便利かなーなんて思ったので、配ってみる。
置きかたは、どーでも。お好きなようにー。7は スクリプトは lib/フォルダに置くので、そこにアップして、relm.ini で @librarys = ('lib/relm_multi.pl'); とします。さすれば、あとは勝手に画面の中に代入されます。細かい使い方は、relm_multi.pl の中にいくつか説明と設定があるのでそちらで。
日記風にするための補助ライブラリ。あくまで「補助」です。このツールを入れるだけでは、日記としてはまだ未完成。
これも置きかたはてきとうにー。lib/に置くなら、relm.ini で @librarys = ('lib/relm_diary.pl'); とでも。設定は、relm_diary.pl の中にいくつか。このツールでできることは、以下の通り。
他は、relm.iniの設定やスキンをちょこちょこいじってくださいませ。タイトルのとこに、日付($MONTH月$DAY日$WDAY)をいれればちょっと日記風?
また、日付選択のselectボックスは、フォームスキン(l_form.html)の、フォームソース内に、<!--DATE_SELECT-->というタグがあればそこに代入、なければ<!--COMINPUT-->の後に代入されます。デザインにこだわるなら、追加してくださいな。追加する場所は<!--お名前とか-->で検索すれば結構早く見つかります。
また、管理人のみ投稿可にするときは、relm.cgi だけじゃなく、getpics.cgi の管理パスも変えてくださいです。
普通は画像アップロードからはサムネイルは造られませんが、以下のような方法を使えば作らせることができます。(一度コンティニューして、しぃアプを通せば、これがなくても造られますが)設置が結構手間なので、根気強く。(笑)まず、下のファイルをDL。
他のサイトさんのツールを使わなきゃなので、外部ツールにしてます。適当にUPして、relm.ini で @librarys = ('lib/relm_thumb.pl'); とでも。設定は、relm_thumb.pl の中にいくつかあるので、好きなように。
そして、菅処さんにいき、CGI配布 > 小物のとこにある、resize.zipをDLして解凍してください。これが、サムネイルをつくるライブラリです。
resize.zip を解凍してでてくる、check.cgiを、relm.cgiと同じフォルダにUPして、実行します。すると、こんな感じのがでてきます。
見るところは、
PerlMagick NG
・・・
NetPBM + libjpeg-progs NG
・・・
repng2jpeg(i386-****) dynamic:OK
・・・
の、NGかOKか、ってとこです。ちなみに、ロリポおじさんは全部OKになります。強ひw
一番楽(笑)
resize.zip を解凍してでてくる、resize.pl.magick というファイルを resize.pl と名前を変更して、サーバにUPします。(デフォルトでは lib/ フォルダの中)
できたら、手順 7 に進んでください。
これも楽。
resize.pl.netpbm というファイルを resize.pl と名前を変更して、サーバにUPします。(↑上とファイル名違う)これも、できたら手順 7 に進んでください。
他はだいたいこんな感じかと。repng2jpeg(i386-****) dynamic:NG static:OKのときもここ。これが×だったら、諦めましょうw
resize.pl.reというファイルを resize.plと名前を変更して、サーバにUPします。(lib/フォルダの中に。lib/以外に置くなら、relm_thumb.pl の設定も変えること)
そして、先ほどの菅処さんのところから、repng2jpeg.zip をDLして、解凍します。いっぱいフォルダがでてきますが、こらえること。(笑)
で、今度は、repng2jpeg(i386-****) dynamic:OKの、i386-****の部分に注目。ここを頼りに、フォルダを1つ選びます。他は使いません。
i386-linux なら、i386_linux_dynamic のフォルダ、i386_freebsd なら、i386_freebsd_dynamic のフォルダ、という感じ。(dynamic:NG static:OK だったら、i386_****_static のフォルダ)
フォルダを選んだら、その中にある、repng2jpeg (と、gif2png) を、relm.cgi と同じ階層に、バイナリモードでUPします。
そして、パーミッションを 700 にします(644は×)
最後に、また check.cgi を実行して、./repng2jpeg Not Foundだったところが、以下のようにになったことを確認してください。
./repng2jpeg Found
./repng2jpeg Permisson:OK
./repng2jpeg Exec:OK
これで手順 6は終わりです。オツカレサマ。
で、最終確認です。relm.cgiから、何かファイルをアップロードして、カタログモードを開きます。無事サムネイルが作られていたら、大成功です。オメデトウ。
relm_thumb.pl をいちいち読み込むのがイヤな人は、relm_thumb.pl の中身を、全部relm2.pl に丸ごと移してくれれば○。
これでも、「できねーw」って場合は、もう一度読み直しつつ、resize.zip を解凍したときにでる read.txt を読みながら、自分でうりうりがんばってみましょうwそんなわけで、できたひとは、菅処のすがさんに感謝を忘れずに、有効に使ってください。(笑)
しぃペインターでは、ver1.04あたりで境があり、それ以前の古いバージョンで描いたPCHファイルを、以後のもので再生すると、壊れる、というか、普通に再生はできません。
でも、そのアニメーションも見たくなったり、描き換えしたりしたい、というときもあるかと思います。そこで、それを古いアプレットも使えるようにして、無理やり解決します。(笑)
どんなのか簡単に言うと、別のフォルダに、古いバージョンのアプレットを入れ、指定があったときに、普通のではなく、そちらのアプレットを使うようにします。つまり、アプレットを2つ用意して、選ぶ、という感じ。
指定は、Continueや編集画面にチェックボックスが増えているので、それのOn/Offで変更されます。デフォルトではApp2というとこ。そんな、ツール。
置き方とか設定の仕方は、いつも上と同じです。適当に。
他のCGIなどから、Relm用にログ変換するスクリプトを置いておきます。
使い方は、ダウンロードして、解凍して、lib/ にアップして、設定ファイルの 管理画面専用の拡張ライブラリのところに、@libraryz = ('lib/relm_○○.pl'); (ツールのファイル名)などと設定を変更してください。
そして、管理画面にいくと、セレクトメニューの一番下に項目が追加されているはずです。
それでは、変換ツール群。(Relm→BBSNote-v8 へのログ変換ツールはもうしばしお待ちください)
…をちょっと説明しますが、ここを理解するには、ある程度のCGIの知識が必要です。(笑)
まず、Relm では、スクリプトの中の要所要所で、任意のサブルーチンなどを呼び出すことができます。
これはBBSNoteさんいじってるときに、「うわーこいつぁうまことしてるなー」、ってすごく感動した、一つのアイデアですねー。…パクりですかw
やりかたはほぼ同じで、いじったことあるひとなら分かると思うんですが。例えば、@relm_call_1 という配列に、&multiskin という値を入れると、Relmのサブルーチン sub relm 内の特定の位置で、サブルーチン sub multiskin を呼び出す、という仕組み。
実例をあげるなら、まず、適当なファイルを作って、名前を test.pl などとして、test.pl の中に 次のように書く。
push(@relm_call_1,'test'); # 追加
sub test {
print "Content-type: text/html\n\n";
print "あっちょんぷりけ";
exit;
}
1;
そして、relm.ini で @librarys = ('test.pl'); と追加します。そしたら、アップロードして、relm.cgi を実行してみてください。画面にあっちょんぷりけとでたら成功です!ヤッタ!…って、もちろん、これ自体は何ににも使えないんですけどね。
やっぱり、ツールをつくるには、Relmの中を理解しなければいけません。かなりの努力と根気がいると思います。(^^;でも自分でやりたいことがどうしてもできない場合は、これをやるしかないので、…がんばってください。(笑)
中見てると、ソース汚ねーなー、とか思うかもしれませんが、耐えてくださいw
また、面白そうなアイデアがあったら、7に言ってくれると勝手に作るかもしれません(笑)改造の相談とかは結構楽しいですねー。CGIの話できるひとって周りにそーいないので。
それではでは、そんな感じで。
JS書き出しを使ってデータを取り出し、他のページに表示させてやろう、というワザ。設定は、拡張設定の$jswriteとおまけ設定のとこにあります。
おえびの入口ページや、おえびサイトだったらINDEXに最新画像を表示したり、他にも、背景を登録して、ランダム背景にするなど、…まあ、たまに使い道があります。(笑)最新の投稿日時とかもわかるか。
それでは、ソース。relm/ の一つ上の階層に置いたファイル の場合です。下の中身をコピって、表示したい箇所に貼り付ければOKです。
<script type="text/javascript" src="relm/relm_n.js"></script>
<script type="text/javascript"><!--
// イメージの前のURL (イメージがhttp://ではじまるときなど、ログフォルダ内以外のとき)
var baseurl = 'relm/';
// 0:ランダム, 1:最新の画像 のデータにする
var norr = 0;
// ランダムにするときの、ページを更新したとき切り替わる秒数. 0なら関数ランダム.
var rsec = 2;
// データが見あたらないときの画像
var noimg = 'relm/data/relm_0001.png';
// ここからスクリプト --------->
var tim,ran,relm;
var img='';
// ランダム
if(norr!=1){
while (!img){
if(rsec){ ran = Math.floor((new Date()).getTime()/(rsec*1000) % relms.length); }
else{ ran = Math.floor(Math.random()*relms.length); }
relm = relms[ran].split('<>');
img = relm[18];
}
// 最新の画像
}else{
for (var ran=0;ran<relms.length;ran++){
relm = relms[ran].split('<>');
if(relm[18]){ img = relm[18]; break; }
}
}
if(img && img.indexOf('http://',0) < 0){ img = baseurl+img; }
if(!img){ img = noimg; }
// 本文に書き出すタグ.
// 「img」は画像データ, 他のデータは「relm[3]」みたいに配列指定で
document.write('<img src="'+img+'" border=0 alt="'+img+'">');
document.write(relm[5]+' by '+relm[3]+''+relm[2]+'');
// --></script>
<noscript>
<img src="relm/data/relm_0001.png" border=0 alt="@javascript-off">
</noscript>
SCRIPTの上の部分に、設定が 4つあるので、目を通してください。
一番下の document.write() 内が、表示されるソースです。ソースは「' '」か「" "」の中に書いて、JSの引数は素で書きます。結合するときは「+」でくっつきます。
document.write('投稿者の名前:' + relm[3] + '<br>日時:' + relm[2]);みたいな感じ。使える引数の解説?は、上のサンプルページにずらりと並べておきました。また、JSは、SCRIPTの途中で改行いれるとエラるので、1行文で。
また、relmフォルダの一つ上の階層にページを置くことを想定してるので、src="relm/relm_n.js や baseurl = 'relm/' などのファイル・フォルダアドレスは、適当に変えること。src="cgi-bin/relm/relm_n.js" や baseurl = 'cgi-bin/relm/' など。
思いついたら増やしていこうかな、と。
投稿者が投稿前に、pngにするか、jpgにするか、選べるようにできます。
メインスキンの、アプレットのソース部分(<!--APPLET-->~<!--/APPLET-->)の中に、次のようなセレクトフォームのソースを追加します。アニメーションチェックボックスの前あたりがいいかと。
<label for="image-format">format</label> <select id="image-format" name="image_format"> <option value="each" selected>---</option> <option value="png">png</option> <option value="jpg">jpg</option> </select> </textarea>
すると、
な感じで、セレクトフォームが追加され、これを選んでペイント画面に入ると、保存形式が変わっています。
あ、これにはペイントツールが必要です。(笑)デフォルトのままなら、ペイントツールは入る設定になってるので、スキンにセレクトフォームのソースを追加するだけでいいです。
デフォルトで「♪」ボタンを押すと出てくる「パチパチパチ」という文字。拍手したときの名残雪なのですが、いつも「パチパチ」ではつまらない。
「へぇ~」とか「もへー」とかに変えられないのか。
実は、結構簡単に変えられます。(笑)
どこで変えるのかというと、これもメインスキン($l_skin)の中です。パチパチで単語検索すればすぐ見つかるのですが、<!--拍手ボタンのみえないフォーム-->のところに、<input type="hidden" name="comm" value="パチパチパチ">という部分があるので、そこの部分を好きなようにいじってください。
「♪を押すたびにコメントをランダムにする」とかは、JavaScriptの function patisub(pno){ } 内をいじればできそうですが、ここでは説明いたしません。少しJSを勉強すればひとりでもできそうですよ。
ちなみに「♪」のボタンも、ソースの中で普通に変えられますので、ご自由に。
ページの下にある、おえびのカウンター部分は、JSを使っています。
カウンターが回る条件は、「relm.cgi?mode=counter」にアクセスしたとき。また、「relm.cgi?mode=counter」ではJS出力されますが、「relm.cgi?mode=counter&image」などとすると、1x1の透過GIF画像形式で出力されます。
JS形式で出力されたときの引数は「counter」です。
ver2.0~のスキンでは、カウンターの引数は、CGIでなくカウンターJSファイル(relm_n.js)からとっています。スキンの「$counter」には、「relm_c.js」と、↑のファイルが代入されます。
しかし、JSファイルからカウンターを取ると、正確な値は取れません。(CGIからJSファイルに書き出すのと、HTMLがJSファイルを読むのの時間差が)
なので、正確なカウント数値を出したいときには、カウンターのJSファイルからでなく、CGIから引数をとってください。つまり、
<script type="text/javascript" src="$counter">
<img src="$script?mode=counter&image" width=1 height=1>
↓
<script type="text/javascript" src="$script?mode=counter">
<noscript>
<img src="$script?mode=counter&image" width=1 height=1>
</noscript>
ただ、JS形式にも関わらず勝手に広告タグが入ってしまうようなところは、JSエラーが起きてしまうので注意です。Tok2など。
流れが速いところや、結構ログ数がたまってきたりすると、よくページ移動を使うようになります。そういうとき、他のページへのリンクは、ページの下にあるよりも、上のほうにあった方が楽で早いです。ナローの方は特に。
そんなわけで、上のほうにもリンクを置いてみましょう。
変更するところは、スキンの329~344行目付近~の、<!--BACK--> ~ <!--NEXT-->まで。その部分を消すかどうにかして、代わりに↓のタグを入れてみましょう。
Page
<!--SELECT_PAGE-->
<a href="$script?$formdata&page=$PAGE&view=$VIEW&ntres=$NTRES&ntop=$NTOP&sform=$SFORM&word=$WORD" title="次のページへ"$cl>$PAGE</a>
<!--/SELECT_PAGE-->
<!--SELECT_PAGE-->~内を書き換えます。でも FORMタグを使うので、<!--BACK--> ~ <!--NEXT-->なども含めて1行分、FORMタグで挟んでください。とりあえずソース。
<form action="$script" method=""get">
<!--FORMINPUT-->
<input type="hidden" name="view" value="$VIEW">
<input type="hidden" name="ntres" value="$NTRES">
<input type="hidden" name="ntop" value="$NTOP">
<input type="hidden" name="sform" value="$SFORM">
<input type="hidden" name="word" value="$WORD">
<select mode="page" onChange="submit();">
<!--SELECT_PAGE--><option value="$PAGE">$PAGE P</option><!--/SELECT_PAGE-->
</select>
<noscript><input type="submit" value="Submit"></noscript>
</form>