X-Git-Url: http://git.veekun.com/zzz-spline-frontpage.git/blobdiff_plain/e37070097adebe37eaf3f95d71a5005b749f3ff3..07bbfcdadac8fffd8a25472e8d44560ae8fbf9a8:/splinext/frontpage/controllers/frontpage.py?ds=inline diff --git a/splinext/frontpage/controllers/frontpage.py b/splinext/frontpage/controllers/frontpage.py index fee79aa..fdb0b4c 100644 --- a/splinext/frontpage/controllers/frontpage.py +++ b/splinext/frontpage/controllers/frontpage.py @@ -2,12 +2,13 @@ import datetime import logging from pylons import config, request, response, session, tmpl_context as c, url -from pylons.controllers.util import abort, redirect_to +from pylons.controllers.util import abort, redirect from routes import request_config from sqlalchemy.orm.exc import NoResultFound 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 @@ -45,6 +46,13 @@ class FrontPageController(BaseController): 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. """ @@ -93,11 +101,21 @@ class FrontPageController(BaseController): if c.user: c.user.stash['frontpage-last-seen-time'] = now meta.Session.add(c.user) - meta.Session.commit() else: response.set_cookie('frontpage-last-seen-time', now) # Done! Feed to template c.updates = updates - return render('/index.mako') + # 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 + # everything in the session, undoing any eagerloading that may have + # been done by sources + meta.Session.commit() + return ret