SSIで次へ効果のリンク

[新着] Webテンプレートを仮オープンしました



0   名前: 花子 : 2006/08/08(火) 18:54  ID:x8aqmlLd
SSIを使い、現在表示しているページに1プラスされたページ、または1マイナスされたページへのリンクを貼りたいと思っています。
<a href="02.htm">前</a>/<a href="04.htm">次</a>のようなものです。
http://www.tagindex.com/cgi-lib/q1bbs/patio.cgi?mode=view2&f=2445&no=40
の方法をつかってみたのですが、リンクが表示されませんでした。
まず<!--#exec cmd="navi.cgi"-->をリンクを表示したい場所に書き、同じフォルダ内にnavi.cgiを置きました。
使っているサーバーはロリポップです。

宜しくお願いします。

1   名前: Z ◆XTzyosZXcL : 2006/08/08(火) 18:54  ID:P1sb1nP7
 前のスレッドを引きずる形で恐縮ですが、多分以下のことが分からないとどなたもお答えしようがないのではないかと思いますのであえて指摘させていただきます。

http://www.tagindex.com/cgi-lib/q1bbs/patio.cgi?mode=view2&f=2445&no=62でかふぇおれさんがおっしゃっていた、

「ロリポップサーバーの SSI 使用上の注意(註:多分http://lolipop.jp/?mode=manual&state=hp&state2=cgiのことでしょう)はお読みになりましたか」

の件はどうされましたか?http://www.tagindex.com/cgi-lib/q1bbs/patio.cgi?mode=view2&f=2445&no=64ではそれについてご回答がないようですが。

#あるURIを提示された場合、そこでさらに参照URIが提示されていればさらにその先まで追わないと、結局問題が解決しないということになりがちですよ。

2   名前: 花子 : 2006/08/08(火) 18:54  ID:x8aqmlLd
質問を放置してしまい申し訳ございませんでした。
使用上の注意は、この掲示板に相談しに来る前に読んでみました。
それにもかかわらず.shtmにしていなかったのは、SSI利用の拡張子というのが何を示すのかわからなかったからです。
SSIに関係するファイルは、すべて.shtmにするのでしょうか?
つまりhttp://www.tagindex.com/cgi-lib/q1bbs/patio.cgi?mode=view2&f=2445&no=40
my $prev = ($u - 1) . ".html";
my $next = ($u + 1) . ".html";
の部分の.htmlを.shtmにしたほうが良いということでしょうか?

他の注意事項については、
PERLのパスはusr/bin/perl だったので、変えていません。
ディレクトリはどこでもということなので、気にしていません。
navi.cgiと01.shtmは同じフォルダに入れていて、相対パスでリンクしています。

ご指摘ありがとうございました。

3   名前: 花子 : 2006/08/08(火) 18:54  ID:x8aqmlLd
すいません。注意事項を読み直したのですが、どうやらパーミッションが違ったようでした。
パーミッションを直すと、次へや前へは表示されたのですが、01.shtmから次へへ飛ぶと2.htmが表示されました。
私は全てのファイルを01,02,03としているので、02.shtmを表示させるようにしたいのですが、、
ファイル名を直した方がいいということでしょうか?

結局は注意事項の読み足らなさ。
申し訳ありませんでした。

4   名前: かふぇおれ : 2006/08/08(火) 18:54  ID:MRwTGpOM
先ずは
http://www.tagindex.com/cgi-lib/q1bbs/patio.cgi?mode=view2&f=2445&no=40
を自分なりに読み解いてみましょう。
解らない所は「Perl ○○」と半角空きで検索してみると、意味が掴めます。

で、今回の話では
sprintf("%02d",$u)
が理解できると大丈夫です。

# CGI のテストは公共のサーバーで行ってはいけません。
# ローカル環境でテストしてからサーバーにアップしましょう。

5   名前: 花子 : 2006/08/08(火) 18:54  ID:x8aqmlLd
ありがとうございます。
自分なりに解いてみました。
なかなか分からない用語が多いもので全ては理解できなかったのですが、
?の前の文字は0か1の場合にいれると書かれていたので
s?htm
という部分は0か1の場合はsも入れる、という意味でいいのでしょうか。
そうすると02.htm以降は.shtmにする必要はないということでしょうか?

sprintf("%02d
というのは%dが10進法とかかれていましたが、$uはまだ見つけられていません。
何かオススメのCGI講座か何かあれば、教えてもらえませんか?
あつかましいとは思いますが、お願いします。

CGIのテストをローカルで行ったところ、メモ帳のように<BR>などのタグがついたものが表示されました。
直す方法はあるでしょうか?

6   名前: かふぇおれ : 2006/08/08(火) 18:54  ID:Ji0blfRq
惜しい(w
sprintf("%02d",$u) は $u の桁数を2桁で成型するって事(意訳)です。
$u =~ s/.*(\d+).s?html?$/$1/i; だと、$u の値が一桁にしかならない様なので、
#!/usr/bin/perl

use strict;
package main;
{
my $u = $ENV{DOCUMENT_URI};
$u =~ s/(\d+).s?html?$/$1/i;
my $n = $1;
my $prev = sprintf("%02d",($n - 1)) . ".shtml";
my $next = sprintf("%02d",($n + 1)) . ".shtml";

print <<__________HTML_DATA__________;
<ul>
  <li><a href="$prev" rel="prev">前</a></li>
  <li><a href="contents.html" rel="contents">目次</a></li>
  <li><a href="$next" rel="next">次</a></li>
<ul>
__________HTML_DATA__________
  
    exit 0;
}

こうすれば大丈夫なんじゃないでしょうか。
# 実は私、 Perl は全然詳しくないので、ここで回答して良いのか疑問なのですが…。
# きっと詳しい方がツッコミを入れてくれると願ってます。
# 段々ここで扱うべき話題か解らなくなってきました。


7   名前: 花子 : 2006/08/08(火) 18:54  ID:x8aqmlLd
結局教えてもらってしまう形になってしまい、本当にありがとうございます。
私は間違ってしまい…お恥ずかしいかぎりです。。
($n - 1)の前に "%02d"をつけることによって2桁で出来るようになったんですね。
さっそく試してみましたが、思うように動きました。
ありがとうございます。

ずうずうしいとは思いますが、もう一つよろしいでしょうか?
Javascriptを、そのSSIの中に書いた場合、スクリプトに対応していない人も動かすことが出来るのでしょうか?
具体的に言うと、<A HREF="javascript:window.close()">Close</A>を使いたいのです。
実は目次から本文のページに移るときに別窓表示をしているのです。
フレームをつかっていて表示場所が小さくなってしまうので。
ですから
<li><a href="contents.html" rel="contents">目次</a></li>
で目次へ飛び、その目次から本文へと飛ぶと、どんどんページが増えていってしまうので迷惑かなっと思ったのです。

それとも閉じる作業は見る人に任せて、目次へ飛ぶリンクをなくせばいいだけでしょうか?
自分はCloseで閉じるのは便利だと思う人なので、Closeを作った方がいいかなっと思ったのですが……。

http://www.rescue.ne.jp/CGI-BBS/cgi/perl/20040106115619.shtml
>CGIがJavaScriptを送り出すことは可能です
と書いてあったので、
<a href="contents.html" rel="contents">目次</a>
の部分を<A HREF="javascript:window.close()">Close</A>に変えて自分のパソコンをスクリプト無効にしてみたら、Closeは表示されたのですが閉じられなかったもので。。


なんだかスレッドのタイトルとは関係のないことになってしまっているので、扱うべき話題でないと思ったら無視して下さって結構です。
申し訳ございません。



8   名前: かふぇおれ : 2006/08/08(火) 18:54  ID:MRwTGpOM
え〜と、用語が混乱している様なので一旦整理を。
大雑把に言うと…(もの凄く大雑把です)

Javascript … ユーザーサイドスクリプト(相手の環境任せ)
SSI … サーバーサイドインクルード(サーバー側で処理)
CGI … コモンゲートウェイインターフェイス(要求に応じて処理結果を返す仕組み)

という事で、『Javascriptを、そのSSIの中に書いた場合』は当然、
その Javascript に対応している人以外には意味のない表記となります。
そして今回の花子さんの場合は、呼び出しに使った <!--#exec cmd="navi.cgi"-->
このコマンドが SSI で、呼び出しているのは Perl(という言語)で記述された CGI ファイルです。

まあ、折角 SSI で幅広く対応するのに、わざわざ Javascript で狭めてしまうのは勿体ないですよね。
サイト構成が解らないので何とも言えませんが、個人的には新規ウィンドウを開く様にはしない方が良いと思います。(この辺は前スレの内容とも被る部分です)
セキュリティ的に感心しないのと、心情的に新規ウィンドウが立ち上がる事を嫌う方は多いです。
『目次から本文のページに移るときに別窓表示をしている』のは target=_blank と指定しているのでしょうか。固定ウィンドウ名を指定してみたらどうでしょう。
まさかここで window.open() なんて事はないですよね(w

9   名前: Z ◆XTzyosZXcL : 2006/08/08(火) 18:54  ID:zm7KJEHW
>>5
 そもそも拡張子でファイル形式を判別するのはWindows系OSの慣習だったはずで、「.shtml」に変えてレンダリングがおかしくなるというのは明らかにIEのせいだと思うのですが(オプションで「ファイルの内容」で判別する、というのがあったと思います)、サーバ側の設定で「これらの拡張子をHTML(XHTML)としてみなしてください」という指定は可能だったと思います(この辺はレンタルサーバの資料をご確認ください)。

 フレームに関することについては>>8のかふぇおれさんと同意見です(せっかくフレームを使っているのに新規ウインドウを開かせることに意味が見出せない)。

10   名前: 花子 : 2006/08/08(火) 18:54  ID:x8aqmlLd
>>8
今みなおすと、なんだか分かりづらい説明になっていましたね。。
理解してくれてありがとうございます。
スクリプトに対応していない人には、やはり無理なのですか。
target=_blank としていました。
フレームで割っていて、見る場所が狭いと嫌かな?と思って別窓にしていたのですが、別窓はやはり嫌う人が多いですよね……。
別窓表示は止めることにします。
ありがとうございました。

>>9
一応、設定はファイルの拡張してなく内容によって判別するようになっています。
IEのせいということは、IE以外でやればいいんでしょうか?
拡張子をHTMLとして見させる、というのが今ちょっと分からないのでIE以外でやってみることにします。
本当は試してみてから、ここへ書き込むのがよいんでしょうが…すいません。
フレームについてのご意見ありがとうございます。
フレーム内に表示させることにします。


一番最初、質問していた内容からはずれてしまったりしたにも関わらず、回答を下さって有り難うございました。
自分の思うとおりに出来たのも皆様のおかげです。
本当にありがとうございました。



一覧へ戻る