searchform only for mimetype text/wiki
It was annoying for me that a quick search over the searchform always displayed a lot of attachments (images, word docs, etc.)
So I found a quick and maybe ugly solutions.
System Info:
- Version
- 1.7.1
- Theme
- Search
- Xapian Search enabled
- Example
Changes
Theme
I added to the function searchform a html checkbox, where it's possible to submit a mimetype (=text/wiki). In my case this is the default
<input id="searchmimetype" type="checkbox" checked="checked" name="mimetype" value="text/wiki">
for your information here is my new searchform; but be aware this is used for my heavy customized theme (original a SimpleMente).
def searchform(self, d):
""" assemble HTML code for the search forms
Changed: linebreak added for simplerock. Searchbox formatting now done by
css
@param d: parameter dictionary
@rtype: unicode
@return: search form html
"""
_ = self.request.getText
form = self.request.form
updates = {
'search_label': _('Search:'),
'search_alt': _('Search'),
'search_titles_alt': _('Search Titles'),
'search_full_alt': _('Search Full Text'),
'search_value': wikiutil.escape(form.get('value', [''])[0], 1),
'search_full_label': _('Text', formatted=False),
'search_title_label': _('Titles', formatted=False),
'search_mimetype_label': _('only pages', formatted=False),
}
d.update(updates)
html = u'''
<form id="searchform" method="get" action="">
<div>
<input type="hidden" name="action" value="fullsearch">
<input type="hidden" name="context" value="180">
<label for="searchinput">%(search_label)s</label>
<input id="searchinput" type="text" name="value" value="%(search_value)s" size="20"
onfocus="searchFocus(this)" onblur="searchBlur(this)"
onkeyup="searchChange(this)" onchange="searchChange(this)" alt="%(search_alt)s">
<br>
<span class="searchmimetype"><input id="searchmimetype" type="checkbox" checked="checked" name="mimetype" value="text/wiki"> %(search_mimetype_label)s </span>
<br>
<input id="titlesearch" name="titlesearch" type="submit"
value="%(search_title_label)s" alt="%(search_titles_alt)s">
<input id="fullsearch" name="fullsearch" type="submit"
value="%(search_full_label)s" alt="%(search_full_alt)s">
</div>
</form>
<script type="text/javascript">
<!--// Initialize search form
var f = document.getElementById('searchform');
f.getElementsByTagName('label')[0].style.display = 'none';
var e = document.getElementById('searchinput');
searchChange(e);
searchBlur(e);
//-->
</script>
''' % d
return html
Action
I needed also to change the fullsearch.py
Mainly I add “mimetype:major/minor” to the needle string (like advancedsearch). Here is my diff
--- MoinMoin/action/fullsearch.py 2008-08-04 14:50:56.000000000 -0500
+++ plugin/action/fullsearch.py 2008-08-04 14:50:08.000000000 -0500
@@ -82,6 +82,7 @@
mtime = None
msg = ''
historysearch = 0
+ mimetype = request.form.get('mimetype', [0]) #removed from only advancedsearch
# if advanced search is enabled we construct our own search query
if advancedsearch:
@@ -92,7 +93,6 @@
categories = request.form.get('categories', [''])
timeframe = request.form.get('time', [''])[0].strip()
language = request.form.get('language', [''])
- mimetype = request.form.get('mimetype', [0])
excludeunderlay = request.form.get('excludeunderlay', [0])[0]
nosystemitems = request.form.get('nosystemitems', [0])[0]
historysearch = request.form.get('historysearch', [0])[0]
@@ -157,6 +157,11 @@
needle += '(%s) ' % ' '.join(['-%s' % t for t in word_re.findall(not_terms)])
if or_terms:
needle += '(%s) ' % ' or '.join(word_re.findall(or_terms))
+ else:
+ #added for mimetype search over the searchform
+ if mimetype[0]:
+ needle = 'mimetype:%s (%s)' % (','.join(mimetype), needle)
+
# check for sensible search term
stripped = needle.strip()
Result
Everything: fullsearch_everything.png
Only Wiki Pages: fullsearch_only_wikipages.png
Futures
Maybe somebody with a better python knowledge could create a better solution... don't know... just want to share my “experience”.
Bye -- MarcelHäfner 2008-08-04 20:28:25
