[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