Snow-Materia > Relm & Jinny > 小技と応用とツール


Page Guide
Anchor

JS書き出し
説明


Preamble

このページでは、 Relmに取り付ける拡張ツールや、 Relmで応用してできる小技などについて、いくつか紹介しています。 ほかにも、アイデアさえあれば結構いろいろできると思いマス。

お絵描きツール、しぃペインターの紹介は、次のページの お絵描きツール, しぃペ のページをご覧ください。


Contents

ツール

ここで、Relmの機能を拡張するツール・ライブラリなどを紹介。追加したファイルは、relm.ini の @librarys に入れてくれるといいかと。拡張設定の一番下のところです。

マルチスキン

サンプル板で使ってるやつ。スキンいくつか作るひととか、あったら便利かなーなんて思ったので、配ってみる。

relm_multi.pl

置きかたは、どーでも。お好きなようにー。7は スクリプトは lib/フォルダに置くので、そこにアップして、relm.ini で @librarys = ('lib/relm_multi.pl'); とします。さすれば、あとは勝手に画面の中に代入されます。細かい使い方は、relm_multi.pl の中にいくつか説明と設定があるのでそちらで。

日記風にするツール

日記風にするための補助ライブラリ。あくまで「補助」です。このツールを入れるだけでは、日記としてはまだ未完成。

relm_diary.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。

1. relm_thumb.pl

他のサイトさんのツールを使わなきゃなので、外部ツールにしてます。適当にUPして、relm.ini で @librarys = ('lib/relm_thumb.pl'); とでも。設定は、relm_thumb.pl の中にいくつかあるので、好きなように。

2. resize.zip

そして、菅処さんにいき、CGI配布 > 小物のとこにある、resize.zipをDLして解凍してください。これが、サムネイルをつくるライブラリです。

3. check.cgi

resize.zip を解凍してでてくる、check.cgiを、relm.cgiと同じフォルダにUPして、実行します。すると、こんな感じのがでてきます。

見るところは、

PerlMagick NG
・・・
NetPBM + libjpeg-progs NG
・・・
repng2jpeg(i386-****) dynamic:OK
・・・

の、NGOKか、ってとこです。ちなみに、ロリポおじさんは全部OKになります。強ひw

4. PerlMagickOKのとき

一番楽(笑)

resize.zip を解凍してでてくる、resize.pl.magick というファイルを resize.pl と名前を変更して、サーバにUPします。(デフォルトでは lib/ フォルダの中)

できたら、手順 7 に進んでください。

5. NetPBM+libjpeg-progsOKのとき

これも楽。

resize.pl.netpbm というファイルを resize.pl と名前を変更して、サーバにUPします。(↑上とファイル名違う)これも、できたら手順 7 に進んでください。

6. repng2jpeg(i386-****)dynamic:OKのとき

他はだいたいこんな感じかと。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は終わりです。オツカレサマ。

7. 最終確認

で、最終確認です。relm.cgiから、何かファイルをアップロードして、カタログモードを開きます。無事サムネイルが作られていたら、大成功です。オメデトウ。

relm_thumb.pl をいちいち読み込むのがイヤな人は、relm_thumb.pl の中身を、全部relm2.pl に丸ごと移してくれれば○。

これでも、「できねーw」って場合は、もう一度読み直しつつ、resize.zip を解凍したときにでる read.txt を読みながら、自分でうりうりがんばってみましょうwそんなわけで、できたひとは、菅処のすがさんに感謝を忘れずに、有効に使ってください。(笑)

古いアプレットにも対応する

しぃペインターでは、ver1.04あたりで境があり、それ以前の古いバージョンで描いたPCHファイルを、以後のもので再生すると、壊れる、というか、普通に再生はできません。

でも、そのアニメーションも見たくなったり、描き換えしたりしたい、というときもあるかと思います。そこで、それを古いアプレットも使えるようにして、無理やり解決します。(笑)

どんなのか簡単に言うと、別のフォルダに、古いバージョンのアプレットを入れ、指定があったときに、普通のではなく、そちらのアプレットを使うようにします。つまり、アプレットを2つ用意して、選ぶ、という感じ。

指定は、Continueや編集画面にチェックボックスが増えているので、それのOn/Offで変更されます。デフォルトではApp2というとこ。そんな、ツール。

relm_app2.pl

置き方とか設定の仕方は、いつも上と同じです。適当に。

ログ変換あれこれ

他のCGIなどから、Relm用にログ変換するスクリプトを置いておきます。

使い方は、ダウンロードして、解凍して、lib/ にアップして、設定ファイルの 管理画面専用の拡張ライブラリのところに、@libraryz = ('lib/relm_○○.pl'); (ツールのファイル名)などと設定を変更してください。

そして、管理画面にいくと、セレクトメニューの一番下に項目が追加されているはずです。

それでは、変換ツール群。(Relm→BBSNote-v8 へのログ変換ツールはもうしばしお待ちください)

Potte→Relm(relm_potte.pl)

BBSNote-v7→Relm(relm_bbsn7.pl)

Pallet-Town→Relm(relm_pallet.pl)

ツールの作り方

…をちょっと説明しますが、ここを理解するには、ある程度の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書き出し

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.jsbaseurl = '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">

中(<!--SELECT_PAGE--> ~ <!--/SELECT_PAGE-->)

<!--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>



Page Information
Toc
Relm
Prev
Next
First
2003.12.18
Last
2005.01.21