TWiki Formatted Search Results
Inline search feature allows flexible formatting of search result
The
%SEARCH{...}%
variable documented in
TWikiVariables has a fixed format for the search result, that is, a table consisting of topic names and topic summaries. Use the
format="..."
parameter to specify a customized format of the search result. The string of the format parameter is typically a bullet list or table row containing variables (such as
%SEARCH{ "food" format="| $topic | $summary |" }%
).
Syntax
Two parameters can be used to specify a customized search result:
1.
header="..."
parameter
Use the header paramter to specify the header of a search result. It should correspond to the format of the format parameter. This parameter is optional.
Example:
header="| *Topic:* | *Summary:* |"
2.
format="..."
parameter
Use the format parameter to specify the format of one search hit.
Example:
format="| $topic | $summary |"
Variables that can be used in the format string:
Name: | Expands To: |
$web | Name of the web |
$topic | Topic name |
$topic(20) | Topic name, "- " hyphenated each 20 characters |
$topic(30, -<br />) | Topic name, hyphenated each 30 characters with separator "-<br />" |
$topic(40, ...) | Topic name, shortended to 40 characters with "..." indication |
$text | Formatted topic text |
$locked | LOCKED flag (if any) |
$date | Time stamp of last topic update, like 21 Nov 2024 - 23:51 |
$isodate | Time stamp of last topic update, like 2024-11-21T23:51Z |
$rev | Number of last topic revision, like 1.4 |
$wikiusername | Wiki user name of last topic update, like Main.JohnSmith |
$username | User name of last topic update, like JohnSmith |
$summary | Topic summary |
$formfield(name) | The field value of a form field; for example, $formfield(TopicClassification) would get expanded to PublicFAQ . This applies only to topics that have a TWikiForm |
$formfield(name, 10) | Form field value, "- " hyphenated each 10 characters |
$formfield(name, 20, -<br />) | Form field value, hyphenated each 20 characters with separator "-<br />" |
$formfield(name, 30, ...) | Form field value, shortended to 30 characters with "..." indication |
$pattern(reg-exp) | A regular expression pattern to extract some text from a topic. For example, $pattern(.*?\*.*?Email\:\s*([^\n\r]+).*) extracts the email address from a bullet of format * Email: ... . |
$n or $n() | New line |
$nop or $nop() | Is a "no operation". This variable gets removed; useful for nested search |
$quot | Double quote (" ). Alternatively write \" to escape it |
$percnt | Percent sign (% ) |
$dollar | Dollar sign ($ ) |
Note: For
$pattern(reg-exp)
, specify a
RegularExpression that scans from start to end and contains the text you want to keep in parenthesis, like
$pattern(.*?(from here.*?to here).*)
. You need to make sure that the integrity of a web page is not compromised; for example, if you include a table make sure to include everything including the table end tag.
Nested Search
Search can be nested. For example, search for some topics, then form a new search for each topic found in the first search. The idea is to build the nested search string using a formatted search in the first search.
Here is an example. We want to search for topics, do a nested search with each hit, and show the result as nested bullets. Parameters like
scope="text" regex="on" nosearch="on" nototal="on"
are omitted for simplicity.
- First search:
-
%SEARCH{ "freedom" format=" * $topic" }%
- Second search. For each hit we want this search:
-
%SEARCH{ "(topic of first search)" format=" * $topic" }%
- Now we nest the searches. We need to escape the second search, e.g. the first search will build a valid second search string:
-
%SEARCH{ "freedom" format=" * $topic: $n$percntSEARCH{ \"$topic\" format=\" * $dollartopic" }$nop%\" }%
Note that we escape the second search so that it does not get evaluated by the first search:
-
$percnt
to escape the leading percent of the second search
-
\"
to escape the qouble quotes
-
$dollar
to escape the $
of $topic
-
$nop
to escape the }%
sequence
Examples
Bullet list showing topic name and summary
Write this:
%SEARCH{ "FAQ" scope="topic" nosearch="on" nototal="on" header=" * *Topic: Summary:*" format=" * [[$topic]]: $summary" }%
To get this:
- Topic: Summary:
- TWikiFAQ: Frequently Asked Questions About TWiki This is a real FAQ, and also a demo of one easily implemented knowledge base solution. See how it's done, click Edit . SEARCH ...
- TWikiFaqTemplate: FAQ: Answer: Back to: NOP TWikiFAQ WIKIUSERNAME DATE
- TextFormattingFAQ: Text Formatting FAQ The most frequently asked questions about text formatting are answered. Also, TextFormattingRules contains the complete TWiki shorthand system ...
Table showing form field values of topics with a form
Write this in the Know web:
| *Topic:* | *OperatingSystem:* | *OsVersion:* |
%SEARCH{ "[T]opicClassification.*?value=\"[P]ublicFAQ\"" scope="text" regex="on" nosearch="on" nototal="on" format="| [[$topic]] | $formfield(OperatingSystem) | $formfield(OsVersion) |" }%
To get this:
Extract some text from a topic using regular expression
Write this:
%SEARCH{ "__Back to\:__ TWikiFAQ" scope="text" regex="on" nosearch="on" nototal="on" header="TWiki FAQs:" format=" * $pattern(.*?FAQ\:[\n\r]*([^\n\r]+).*) [[$topic][Answer...]]" }%
To get this:
TWiki FAQs:
- How do I delete or rename a topic? Answer...
- How do I delete or rename a file attachment? Answer...
- Why does the topic revision not increase when I edit a topic? Answer...
- TWiki has a GPL (GNU General Public License). What is GPL? Answer...
- How do you log off? Suppose I log in with the guest username but later I want to use another username, how do I log off from the guest user name? Answer...
- I've problems with the WebSearch. There is no Search Result on any inquiry. By clicking the Index topic it's the same problem. Answer...
- What happens if two of us try to edit the same topic simultaneously? Answer...
- I would like to install TWiki on my server. Can I get the source? Answer...
- So what is this WikiWiki thing exactly? Answer...
- Everybody can edit any page, this is scary. Doesn't that lead to chaos? Answer...
--
PeterThoeny - 16 May 2002