QuerySearch Pattern Cookbook
This topic provides tips on the usage of
QuerySearch.
Pattern 1: Show recent changes without user pages
We have everything in the Main web. But the updates to the personal pages are not that interesting to others, so we want to remove these.
We are looking for any page that does not have a form field "FirstName":
<dl>
%SEARCH{
"name~'*' AND NOT FirstName"
web="Main"
excludetopic="Web*,PersonalInfo,TWikiUsers"
type="query"
reverse="on"
limit="15"
order="modified"
nonoise="on"
format="<dt>[[$web.$topic][$topic(25,...)]]<br /><span class='foswikiGrayText foswikiSmall'>$date - <nop>$wikiname</span></dt>"
}%
</dl>
The simple
BlogAddOn has 1 comment topic that gathers all comments on the blog post. It has no Data Form (the blog post has one: BlogPostForm); the topic title is the name of the blog post + "Comments". How can we show the latest 5 comments?
We are looking for a topic with the title "xxxxComments". It has a parent and the parent has a form named "BlogPostForm":
<dl>
%SEARCH{
"name~'*Comments' AND (parent.name/(form.name='BlogPostForm')).value"
web="Main"
type="query"
limit="15"
reverse="on"
order="modified"
nonoise="on"
format="<dt>[[$web.$parent#BlogPostPrompt][$parent(30,...)]] ($rev)<br /><span class='foswikiGrayText foswikiSmall'>$date - <nop>$wikiname</span></dt>"
}%
</dl>
Pattern 3: Search named form fields using interactive user-input text
The code below searches through (two) named fields in all topics having the form 'MyPageForm'. A user search-form has input boxes for the search strings. The page calls itself recursively with results output to a table. The 'lc()' function forces case-insensitive lower case matching.
<noautolink>
<form method="post" action="%SCRIPTURLPATH{view}%/%INCLUDINGWEB%/%INCLUDINGTOPIC%">
Field One: <input type="text" name="search_field_one" value="%URLPARAM{ "search_field_one" encode="entity" }%" size="15" /><br />
Field Two: <input type="text" name="search_field_two" value="%URLPARAM{ "search_field_two" encode="entity" }%" size="15" /><br />
<input type="submit" name="search_submit" value="Search">
</form>
</noautolink>
| *Page Link* | *Field One* | *Field Two* | *Field Three* | *Field Four* |
%SEARCH{
search="(lc(FieldOne) ~ lc('%URLPARAM{"search_field_one" encode="quote"}%') AND
lc(FieldTwo) ~ lc('%URLPARAM{"search_field_two" encode="quote"}%'))"
type="query"
limit="150"
excludetopic="Web*"
order="formfield(FieldOne),formfield(FieldTwo)"
nonoise="on"
format="| [[$topic]] | <i><b> $formfield(FieldOne)</b></i> | $formfield(FieldTwo) | $formfield(FieldThree) | $formfield(FieldFour) |"
}%
This pattern is used in the
FastReport. The
bin/configure
"Find and Install Extensions" needs to find all Extension topics that also have the
_installer
file used to install the Extension. In this application the returned format is very specific as it is parsed by the
bin/configure
application. The Query Search is used to find the matching topics. The formatted output uses a combination of Formfields (compatibility, classification and image) and regular expressions (description, version and release) to extract information from the topic.
%SEARCH{
"form.name='PackageForm' AND attachments[name~'*_installer']"
type="query"
web="Extensions"
nosearch="on"
nototal="on"
format="{ topic: $topic
description: $pattern(.*?\*\sSet\sSHORTDESCRIPTION\s\=([^\n\r]*).*)
compatibility: $formfield(Compatibility)
classification: $formfield(ExtensionClassification)
version:$pattern(.*?\n\|[\s\w-]*\s[Vv]ersion:\s*\|([^|]*)\|.*)
release:$pattern(.*?\n\|[\s\w-]*\s[Rr]elease:\s*\|([^|]*)\|.*)
image: $formfield(ImageUrl)
}$n"
}%