検索仕様のブックシェルフの体裁調整
[shelf] → templates (shelf) → search "検索仕様のブックシェルフの体裁"
<?doctype?>
<html>
<head>
<title><?name?></title>
</head>
<body<?colorScheme?>>
<h2><?name?></h2>
<p><font color=gray>このブックシェルフには次の <?countSwikiBooks?> 冊の Swiki ブックが収められています。リストは更新順です。読みたい Swiki ブックの名前部分のリンクをクリックしてください。また、いくつかの Swiki ブックを選択して下の「検索」ボタンを押せば、興味のあるキーワードを含むページだけをリストアップすることもできます。</font><p>
<form action="<?toRoot?>" method="post">
<?searchSwikis?>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><input type="text" size=31 name="search">
<input type="submit" value="検索"><br> </td></tr>
<tr><td><input type="radio" name="casesensitive" value="true"<?caseTrue?>> 大文字小文字を区別する <br>
<input type="radio" name="casesensitive" value="false"<?caseFalse?>> 大文字小文字を区別しない </td>
<td><input type="radio" name="and" value="true"<?andTrue?>> キーワードおよびフレーズ(例: "I am a phrase")をもれなく含むページ<br>
<input type="radio" name="and" value="false"<?andFalse?>> キーワードもしくはフレーズを、ひとつでも含むページ</td></tr>
</table>
</form>
<?logo?>
</body>
</html>
[shelf] → actions (shelf) → searchSwikis "検索対象にする Swiki ブックを選択できる一覧表示"
| return swikis swikisCol swikis0 |
"Sort Swikis by its Modified Date and Time"
swikis0 _ shelf books select: [ :book |
(book setup at: 'visible' ifAbsent: [true]) and: [book pages isNil]].
swikisCol _ (shelf books select: [ :book |
(book setup at: 'visible' ifAbsent: [true])
and: [book pages notNil]]) collect: [ :book |
{book. (book pages asSortedCollection: [:x :y |
(x date = y date) ifTrue: [x time > y time] ifFalse: [x date > y date]]) first}].
swikis _ (swikisCol asSortedCollection: [:x :y |
(x last date = y last date)
ifTrue: [x last time > y last time]
ifFalse: [x last date > y last date]]) collect: [ :item | item first ].
swikis addAll: swikis0.
return _ WriteStream on: String new.
return
nextPutAll: '<table border=0 cellpadding=0 cellspacing=0>';
nextPutAll: String crlf.
swikis do: [:book | (book setup at: 'visible' ifAbsent: [true])
ifTrue: [((book hasPrivAddress: 'searchable') and: [book formatPrivAddress: 'searchable' request: request response: response shelf: shelf])
ifTrue: [
return
nextPutAll: '<tr><td valign=top><input type="checkbox" name="';
nextPutAll: book showName;
nextPutAll: '" value="true"'.
(request fieldsHasKey: book name) ifTrue: [return
nextPutAll: ' checked'].
return
nextPutAll: '> </td><td>';
nextPutAll: (shelf formatBookTemplate: 'listing' request: request response: response book: book);
nextPutAll: '</td></tr>';
nextPutAll: String crlf]
ifFalse: [return
nextPutAll: '<tr><td> </td><td>';
nextPutAll: (shelf formatBookTemplate: 'listing' request: request response: response book: book);
nextPutAll: '</td></tr>';
nextPutAll: String crlf]]].
return
nextPutAll: '</table><br><hr><br>'.
return
nextPutAll: '<input type="checkbox" name="searchall" value="true"'.
(request fieldsHasKey: 'searchall') ifTrue: [return
nextPutAll: ' checked'].
return
nextPutAll: '> <font color=gray>すべての Swiki ブックを検索対象とするときは、こちらをチェック</font>';
nextPutAll: String crlf.
return nextPutAll: '<br><br>'.
return contents
[shelf] → templates (shelf) → foundBefore "検索結果画面の体裁(上半分)"
<?doctype?>
<html>
<head>
<title>検索結果</title>
</head>
<body<?colorScheme?>>
<h2>検索結果</h2>
<hr>
[shelf] → templates (shelf) → foundMatch "見つかったときの画面"
<table border=0 cellpadding=3 cellspacing=3>
<tr>
<td align=left valign=middle><?emoteHappy?></td>
<td align=left valign=middle><b>条件を満たすページが見つかりました。</b></td>
</tr>
</table>
[shelf] → templates (shelf) → foundNoMatch "見つからなかったときの画面"
<table border=0 cellpadding=3 cellspacing=3>
<tr>
<td align=left valign=middle><?emoteSad?></td>
<td align=left valign=middle><b>条件を満たすページが見つかりません。</b></td>
</tr>
</table>
[shelf] → templates (shelf) → foundAfter "検索結果画面の体裁(下半分)"
<form action="<?toRoot?>" method="post">
<hr><br>
<font color=gray>本サイトには以下の <?countSwikiBooks?> 冊の Swiki ブックがあります。最近、更新されたものから順に表示しています。選択した Swiki ブックから、キーワードを含むページを探し出すこともできます。</font><br><br>
<?searchSwikis?>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><input type="text" size=31 value="<?searchString?>" name="search">
<input type="submit" value="検索"><br> </td></tr>
<tr><td><input type="radio" name="casesensitive" value="true"<?caseTrue?>> 大文字小文字を区別する <br>
<input type="radio" name="casesensitive" value="false"<?caseFalse?>> 大文字小文字を区別しない </td>
<td><input type="radio" name="and" value="true"<?andTrue?>> キーワードおよびフレーズ(例: "I am a phrase")をもれなく含むページ<br>
<input type="radio" name="and" value="false"<?andFalse?>> キーワードもしくはフレーズを、ひとつでも含むページ</td></tr>
</table>
</form>
<?logo?>
</body>
</html>
[shelf] → addresses (priv) → list "検索結果リスト表示体裁"
"Serve this if an index.html file is not available in /swiki/default/files/"
| hasMatch |
(shelf settingsAt: 'searchable' ifAbsent: [false])
ifTrue: [(request fieldsHasKey: 'search')
ifTrue: ["Decrement process priority since it is a search"
Processor activeProcess priority: (ComancheService defaultSearchPriority).
response at: 'cacheing' put: true.
[:stream |
stream nextPutAll: (shelf formatShelfTemplate: 'foundBefore' request: request response: response).
hasMatch _ false.
(shelf books asSortedCollection: [:a :b | (a name) < (b name)]) do: [:book | (((book hasPrivAddress: 'searchable') and: [book formatPrivAddress: 'searchable' request: request response: response shelf: shelf]) and: [(request fieldsHasKey: 'searchall') or: [request fieldsHasKey: book name]]) ifTrue: [book searchFor: (request fieldsKey: 'search') caseSensitive: (request fieldsAsBooleanKey: 'casesensitive') and: (request fieldsAsBooleanKey: 'and') matchBlock: [:page |
hasMatch ifFalse: [
hasMatch _ true.
stream nextPutAll: (shelf formatShelfTemplate: 'foundMatch' request: request response: response).
stream nextPutAll: '<ul>', String crlf].
stream
nextPutAll: '<li><a href="';
nextPutAll: (request referenceShelf: shelf book: book page: page);
nextPutAll: '">';
nextPutAll: book showName;
nextPutAll: ': ';
nextPutAll: page showName;
nextPutAll: '</a> <font color=gray size=-1>最終更新: ';
nextPutAll: page printDate;
nextPutAll: ', ';
nextPutAll: page printTime;
nextPutAll: ' <';
nextPutAll: page user;
nextPutAll: '></font>', String crlf]]].
hasMatch
ifTrue: [stream nextPutAll: '</ul>', String crlf]
ifFalse: [stream nextPutAll: (shelf formatShelfTemplate: 'foundNoMatch' request: request response: response)].
stream nextPutAll: (shelf formatShelfTemplate: 'foundAfter' request: request response: response)]]
ifFalse: [shelf formatShelfTemplate: 'search' request: request response: response]]
ifFalse: [shelf formatShelfTemplate: 'list' request: request response: response]
このページを編集 (10563 bytes)
|
以下の 1 ページから参照されています。 |
This page has been visited 2487 times.