「単語検索」をより便利に使うために†
- ページ: BugTrack
- 投稿者: reimy
- 優先順位: 普通
- 状態: 完了
- カテゴリー: 本体新機能
- 投稿日: 2002-06-27 (木) 14:12:58
- バージョン:
メッセージ†
現在の「単語検索」はヒットしたページへのリンクが表示されるだけですが、そのリンクをクリックして該当ページを表示するときにヒットした文字列をマーキングして表示するようになれば便利。
span style="background-color:yellow">検索文字列</span>という感じのマーキング。
「単語検索」の結果のリンクから飛ぶときに検索文字の受け渡しをして、そのときだけ表示ルーチンの中でマーキング処理するって形になるのかな。
本文をマーキングして表示するルーチンがあれば、プラグインでも使えそう。
ページ先頭に検索窓を表示して、そのページの中でヒットした文字列にマーキングして表示するというような。
実はこれってInternet Explorerであれば、JavaScriptで実現可能なんですが、IE限定になっちゃうので。
JavaScript (IEのみ)でのサンプル
関数定義
function markword(word) {
tags = document.body.all.tags;
var re = new RegExp("("+ word + ")", "gl");
for(i = 0; i < tags.length; i++){
text = tags[i].innerHTML;
newtext = text.replace(re, <span style='background:yellow'>$1</span>");
tags[i].innerHTML = newtext;
}
}
HTML内での関数呼出し
<form>
<div>
<input type="text" name="text">
<input type="button" name="検索" onClick="markword(this.form.text1.value)">
</div>
</form>
長文のページなどでは、けっこう便利に使えるので、PukiWikiでも実現してほしいです。
- PukiWikiで実現するにはmbstringが使えるPHP限定という制限が出来ちゃうんですよね。PHP4.2系からはmbstringは標準装備だからそろそろ解禁しちゃってもいいのかもしれないですけど。 -- kawara 2002-06-27 (木) 17:36:05
- PHP4.0.6からmb_jstring(mbstring)は付属してるので、レンタル系でも日本の業者なら組み込んでると思いますが。PukiWikiの動作環境もマルチバイト対応モジュールを組み込んだ4.0.6以降としているので問題ないでしょう。 -- reimy 2002-06-27 (木) 18:19:10
- mbstringだけで足りたかな。mbregexも使いたいところなんだけど、mbregexっていつからくっついてきてるんだろう。 -- kawara 2002-06-27 (木) 19:03:57
- mbregexもmbstringと同じく4.0.6から標準添付されています。4.0.7のリリース前にPHP4にマージしようという話がPHP-devで出てましたから、もうずいぶん経つはずです。参考 -- reimy 2002-06-27 (木) 21:06:44
- 毎日新聞の記事検索がこの機能があるのでなかなか便利なのだ。 -- reimy 2002-06-29 (土) 15:25:28
- 暫定的に検索結果に本文を部分表示させてみました(添付 func.php)。複数ワード時は表示方法をどうしようか思案中です。どんなもんでしょう?(まだ表示に難ありかな・・・) -- baniko 2002-11-20 (水) 17:37:54
- googleでキャッシュを開いたときみたいに色分けしてみるとか :) -- ぱんだ 2002-11-20 (水) 22:56:38
- あ。<ul><li></li><ul>のところは<ul><li><ul>...</ul></li>としたほうがいいと思いますよ。 -- ぱんだ 2002-11-20 (水) 22:57:45
- <li>のネストはBugTrack/30でも上がっていますが、難しいところですね。おっしゃる通りにすると、ネストされた項目の前の行間が広くて・・・。あぁhtmlspecialchars()通すのを忘れてました。(添付し直し) -- baniko 2002-11-21 (木) 09:43:41
-$retval[$name2] = "<li>$link_tag</li><ul><li class=\"result\">$res_line</li></ul>";
+$retval[$name2] = "<li>$link_tag<ul><li class=\"result\">$res_line</li></ul></li>";
- 行間が広い…?なんででしょうか。スタイルが悪さをしているのかな? -- ぱんだ 2002-11-21 (木) 14:52:46
- CSSでresultに変な設定していました・・・。僕のミスでした。ぱんださんのでOKです。なお、resultはdefault.ja.cssに勝手に書いてくださいませ。(僕はシンプルが好きなので以下のようにしました) -- baniko 2002-11-21 (木) 16:59:51
li.result {
list-style-type:none;
}