Tipsメニュー

レス画面に記事をそのまま参照させる




OTDのカスタマイズ掲示板に比較的多く出てくる質問の1つだと思いますが、意外なことにJavaScriptの類を使わなくても実現できました。
レス画面にて$messageをフォームに入れることで参照画面とする事が普通でしたが、 この方法では参照元の記事の投稿者名やURLを見ながらレスを入れることができません。記事をそのまま見ながらレスを入れられるようにするのが 今回のテーマです。 下に なさけないイメージ画像をのせておきます。







☆カスタマイズの概要☆

通常ではレス画面用に「bbs_reply」を使うのですが、ここでは「bbs_thread」を使います。
threadでは自動的にレス元の情報が加わらないだけで、基本的には両者共にただのhtmlです。ってことで、レス元の情報を入れてやりさえすれば、 「bbs_thread」 もレス画面として機能することになります。

しかし、treeとthreadとではカキコフォームのソースを変えてやらなければなりません。今までのように<body>〜</body>にフォームソースを書いた場合、 これはJSを使わなければ変更できないのですが、OTDのマニュアルをよく見ると、$beginという変数があります。そうです。これを使わない手はないのです。
つまり、この変数を使ってtreeとthreadの各ソースにカキコフォームを内蔵させるのがここでのテーマです。

 

☆具体的には…☆
かなり簡単です。テキストエディターなどに現在のソースを貼り付けて、次の手順で移植して下さい。

ステップ1

現在のソース

<body>〜</body>:A1
resのソース:B1
tree:C1
tread:D1

として、次のものを用意します。

A1を「書き込み用フォーム」と「$board」、「記事より下の部分」に分離し、それぞれA11、A12、A13 と呼ぶことにします。
A11は変更不要。
A12は「$board」→「<!-- $board -->」としてください。
A13もとりあえずは変更不要です。
便宜上、それぞれをA21、A22、A23と呼ぶことにします。

B1には普通、「$hidden」という変数が含まれているはずです。
「$hidden」→「<input type="hidden" name="reply" value="$seq">」として下さい。
また、form内の適当な部分に(分からなければ、<form>の直後に)「<input type="hidden" name="referer" value="bbs_tree">」を追加して下さい。
変更後のものをB2とします

C1については、とりあえずこのままです。(C2と呼びます)

D1は、カスタマイズ済みの方、ごめんなさい。破棄して下さい。
代わりに、treeのソース(C1)をそのままコピーして、それをD2として下さい。

ステップ2

treeとthreadの工事です。今までの表示ソースに書き込みフォームを追加することになります。

まずC2に関して
次のようなソースを組みます。

「 --> begin{A21} C2 <!-- 」
さらに、返信のリンクの部分を次のように変更して下さい

変更前:<a href="bbs_reply?reply=$seq">
 ↓
変更後:<a href="bbs_thread?base=$seq&range=1">

以上で出来上がったものをC3と呼びます。

次にD2に関して
「 --> begin{B2} D2 <!-- 」
さらに、返信のリンクの部分を次のように変更して下さい

変更前:<a href="bbs_reply?reply=$seq">
 ↓
変更後:(なし。<a>〜</a>は削除して下さい。)

以上で出来上がったものをD3と呼びます。


で、これに伴い、<body>〜</body>のソースにも手を加えます。
「A22 A23」とし、これをA3と呼びます。
すなわち、A3は「A1からA11を取り払い、$board の前に「<!--」、後ろに「-->」をつけたものです。

ステップ3

各ソースを次のようにして下さい。
<body>〜</body>:A3
resのソース:なし
tree:C3
thread:D3

これで新しいレスフォームが完成です!
tread表示でレスを入れることになります。

ですが、一つ問題点があります。
threadにも$logが反映されてしまう点です。
これがあると、レス画面なのだかなんだか わけが分からなくなります。
この対策が次のステップ4です


ステップ4

treeでは$logなどを表示させ、threadでは$logなどを表示させないようにします。
これにはスタイルシートが有効です。といっても、次のようにするだけです。

A4:「 A3 </div> 」として下さい。
C4:「 C3 $end{<div>} 」として下さい。
D4:「 D3 $end{<div style="display:none;">} 」として下さい。

ステップ3同様、これらのソースを当てはめれば完了です。

☆副作用は…?☆

ほとんど弊害はないのですが、thread表示を活用していた場合はこのカスタマイズができません。代わりにbbs_indexを用いるなどすると良いでしょうが、この場合、記事はレス対象の1記事のみが表示されます。