Support stuff-other-than-updates.
[zzz-spline-frontpage.git] / splinext / frontpage / controllers / frontpage.py
index 900c87b..fdb0b4c 100644 (file)
@@ -8,6 +8,7 @@ from sqlalchemy.orm.exc import NoResultFound
 
 from spline.lib import helpers as h
 from spline.lib.base import BaseController, render
 
 from spline.lib import helpers as h
 from spline.lib.base import BaseController, render
+from spline.lib.plugin.load import run_hooks
 from spline.model import meta
 from splinext.frontpage.sources import max_age_to_datetime
 
 from spline.model import meta
 from splinext.frontpage.sources import max_age_to_datetime
 
@@ -45,6 +46,13 @@ class FrontPageController(BaseController):
 
             run_hooks('frontpage_updates_updatetype', opt1=val1, opt2=val2)
 
 
             run_hooks('frontpage_updates_updatetype', opt1=val1, opt2=val2)
 
+        Plugins may also respond to the `frontpage_extras` hook with other
+        interesting things to put on the front page.  There's no way to
+        customize the order of these extras or which appear and which don't, at
+        the moment.  Such hooks should return an object with at least a
+        `template` attribute; the template will be called with the object
+        passed in as its `obj` argument.
+
         Local plugins can override the fairly simple index.mako template to
         customize the front page layout.
         """
         Local plugins can override the fairly simple index.mako template to
         customize the front page layout.
         """
@@ -99,6 +107,11 @@ class FrontPageController(BaseController):
         # Done!  Feed to template
         c.updates = updates
 
         # Done!  Feed to template
         c.updates = updates
 
+        # Hook for non-update interesting things to put on the front page.
+        # This hook should return objects with a 'template' attribute, and
+        # whatever else they need
+        c.extras = run_hooks('frontpage_extras')
+
         ret = render('/index.mako')
 
         # Commit AFTER rendering the template!  Committing invalidates
         ret = render('/index.mako')
 
         # Commit AFTER rendering the template!  Committing invalidates