[Checkins] SVN: Grokstar/trunk/src/grokstar/ Add ability to search
published blogs through new search field in macro.
Robert Marianski
rmarianski at openplans.org
Mon Feb 18 02:14:04 EST 2008
Log message for revision 84005:
Add ability to search published blogs through new search field in macro.
Changed:
U Grokstar/trunk/src/grokstar/blog.py
U Grokstar/trunk/src/grokstar/blog_templates/blogmacros.pt
A Grokstar/trunk/src/grokstar/blog_templates/search.pt
U Grokstar/trunk/src/grokstar/static/grokstar.css
-=-
Modified: Grokstar/trunk/src/grokstar/blog.py
===================================================================
--- Grokstar/trunk/src/grokstar/blog.py 2008-02-18 06:02:33 UTC (rev 84004)
+++ Grokstar/trunk/src/grokstar/blog.py 2008-02-18 07:14:04 UTC (rev 84005)
@@ -1,5 +1,6 @@
import random
from datetime import datetime, timedelta
+from itertools import islice
from zope import schema, interface
from zope.interface import Interface
@@ -10,7 +11,8 @@
import grok
from grok import index
-from grokstar.interfaces import IEntry, IBlog, PUBLISHED, CREATED
+from grokstar.interfaces import IRestructuredTextEntry, IBlog
+from grokstar.interfaces import PUBLISHED, CREATED
class Blog(grok.Container, grok.Application):
interface.implements(IBlog)
@@ -23,9 +25,11 @@
class EntryIndexes(grok.Indexes):
grok.site(Blog)
- grok.context(IEntry)
+ grok.context(IRestructuredTextEntry)
grok.name('entry_catalog')
+ title = index.Text()
+ content = index.Text()
published = index.Field()
class WorkflowIndexes(grok.Indexes):
@@ -73,6 +77,24 @@
grok.context(Blog)
grok.name('about')
+class Search(grok.View):
+ grok.context(Blog)
+
+ def update(self, q=None):
+ if q is None:
+ return self.redirect(self.application_url())
+
+ q = q.strip()
+ if not q:
+ self.results = lastEntries(10)
+ return
+
+ entries = Query().searchResults(
+ (query.Eq(('entry_catalog', 'workflow_state'), PUBLISHED) &
+ (query.Text(('entry_catalog', 'title'), q) |
+ query.Text(('entry_catalog', 'content'), q))))
+ self.results = list(islice(entries, 10))
+
class EntriesIndex(grok.View):
grok.context(Entries)
grok.name('index')
Modified: Grokstar/trunk/src/grokstar/blog_templates/blogmacros.pt
===================================================================
--- Grokstar/trunk/src/grokstar/blog_templates/blogmacros.pt 2008-02-18 06:02:33 UTC (rev 84004)
+++ Grokstar/trunk/src/grokstar/blog_templates/blogmacros.pt 2008-02-18 07:14:04 UTC (rev 84005)
@@ -21,6 +21,12 @@
<li><a href="#" tal:attributes="href python:view.application_url('about')">About</a></li>
</ul>
</div>
+ <div id="search">
+ <form action="/search" method="get"
+ tal:attributes="action python:view.application_url('search')">
+ <input type="text" name="q" size="15" />
+ </form>
+ </div>
</div>
<div id="bd">
<div metal:define-slot="main-content" />
Added: Grokstar/trunk/src/grokstar/blog_templates/search.pt
===================================================================
--- Grokstar/trunk/src/grokstar/blog_templates/search.pt (rev 0)
+++ Grokstar/trunk/src/grokstar/blog_templates/search.pt 2008-02-18 07:14:04 UTC (rev 84005)
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" metal:use-macro="context/@@blogmacros/macros/blogpage">
+ <head>
+ <title metal:fill-slot="title">Search</title>
+ </head>
+ <body>
+ <div metal:fill-slot="main-content"
+ tal:define="results view/results">
+ <tal:no_results condition="not:results">
+ Sorry, no results!
+ </tal:no_results>
+ <div class="search-results" tal:condition="results">
+ <ol>
+ <li tal:repeat="entry results"
+ tal:content="structure entry/@@item" />
+ </ol>
+ </div>
+ </div>
+ </body>
+</html>
Modified: Grokstar/trunk/src/grokstar/static/grokstar.css
===================================================================
--- Grokstar/trunk/src/grokstar/static/grokstar.css 2008-02-18 06:02:33 UTC (rev 84004)
+++ Grokstar/trunk/src/grokstar/static/grokstar.css 2008-02-18 07:14:04 UTC (rev 84005)
@@ -28,6 +28,7 @@
#hd {
background: url('http://grok.zope.org/top_bg.jpg');
+ position: relative;
}
#bd {
@@ -83,3 +84,9 @@
font-weight: normal;
font-size: 108%;
}
+
+#search {
+ position: absolute;
+ bottom: 1em;
+ right: 2em;
+}
More information about the Checkins
mailing list