サイト内検索CGI 更新新しい順に表示したい(2)
http://okwave.jp/qa/q9269398.html
↑以前に質問したページです。
解決しないまま4週間たちそうなので(2)のページを作りました。
以前の質問はこんな感じでした↓
────────────────────────────────────────────────────
CGIのSite_Searchを使っているのですが、公式サイトが閉鎖してしまっています。
Site_Searchの検索結果画面はこんな感じです。
http://nihon5ch.net/contents/ch5/site_search.cgi?mode=and&key=%A4%E2%A4%CE&list=40
これを、Key Search(http://www.kent-web.com/data/ksearch.html)のように、
update(Key Searchでいうところの日付)の新しい順に表示し、
できれば「新しい順/古い順」にソートできるようにしたいのです。
site_search.cgiの中身はこんな感じです。
http://delcy.jp/site_search.cgi
────────────────────────────────────────────────────
こちらのサイトのおかげで、
1回目の検索で、検索結果を新しい順に表示し、
検索結果画面の検索窓のところに、プルダウン「(ページの更新日が)新しい順/古い順」を設置する、という所まではできるようになりました。
今困っているのは、
プルダウンで「古い順」を選んでも、検索結果が古い順にソートされない事です。
ちなみに、print "$in{'sort'}<br>";を組み込んで、「古い順」で検索してみると、
値は「0(=古い順)」が表示されます。
↓今回やってみたこと
────────────────────────────────────────────────────
●$sortFlag = $in{'sort'}だけforeach ($top..$end) {の直前に入れたら
「500 Internal Server Error」が出たので以下のようにしました。
●if ($sortFlag == 0) {
@ret = sort{(split(/<>/,$a))[3] cmp (split(/<>/,$b))[3]} @hits;
}
else {
@ret = sort{(split(/<>/,$b))[3] cmp (split(/<>/,$a))[3]} @hits;
}
@hits = @ret;
はforeach ($top..$end) {の直後に入れました
↓今回カスタマイズした部分
----------------
$sortFlag = $in{'sort'};
if($sortFlag == "") { $sortFlag = 1; }
if ($sortFlag == 0) {
@ret = sort{(split(/<>/,$a))[3] cmp (split(/<>/,$b))[3]} @hits;
}
else {
@ret = sort{(split(/<>/,$b))[3] cmp (split(/<>/,$a))[3]} @hits;
}
@hits = @ret;
foreach ($top..$end) {
($hfile,$htitle,$hsize,$hupdate,$hinf) = split (/<>/,$hits[$_]);
if ($sortFlag == 0) {
@ret = sort{(split(/<>/,$a))[3] cmp (split(/<>/,$b))[3]} @hits;
}
else {
@ret = sort{(split(/<>/,$b))[3] cmp (split(/<>/,$a))[3]} @hits;
}
@hits = @ret;
────────────────────────────────────────────────────
よろしくお願いいたします。
お礼
有り難うございました。 大変参考になりました。 引き続き勉強してみます。