[web-devel] Yesod: unifying breadcrumbs and routes

Michael Snoyman michael at snoyman.com
Fri Jun 10 07:03:24 CEST 2011

I agree that defining breadcrumbs separately is an annoying, tedious
process. But the fact is that it's a necessary tediousness. It's very
rare that you could determine the title or parent that easily for
every route. Take the simple example of a blog with multiple authors:

/ RootR GET
/author/#AuthorId AuthorR GET
/post/#PostId PostR GET

The title for AuthorR and PostR will both need to be looked up from
the database, and the parent page for PostR will also require a DB
lookup. (You could restructure your URLs to avoid that, but that's not
my point here.)


On Fri, Jun 10, 2011 at 2:02 AM, Eric Schug <schugschug at gmail.com> wrote:
> There seems to be much redundant information created within the Yesod
> structure.
> One place to define the routes
> Another place defines the route hierarchy for breadcrumbs with titles.
> A third place defines, but not integrated into Yesod, defines use menus
> (usually similar hierarchy and titles).
> Would it be possible to have all of this defined into one place, by
> extending the routes definition using white space
> hierarchy similar to hamlet definition.
> and optionally include Title name.
> -- Example config/routes
> /static StaticR Static getStatic
> /favicon.ico FaviconR GET
> /robots.txt RobotsR GET
> / RootR GET "Home"
>    /contact  ContactR GET  "Contact Us"
>    /services ServicesR GET  "Our Services"
>        /services/stuffwedo StuffWeDoR GET "Stuff We Do"
> The resource list would be expanded to include this hierarchy. Something
> like
> Resource String
> <http://hackage.haskell.org/packages/archive/base/>
> [Piece
> <http://hackage.haskell.org/packages/archive/web-routes-quasi/0.6.3/doc/html/Web-Routes-Quasi-Parse.html#t:Piece>]
> [String
> <http://hackage.haskell.org/packages/archive/base/>]
>  String Maybe String
> From this a breadcrumb could be build from a maker (if desired).
> mkYesodData "Example" $(parseRoutesFile "config/routes")
> mkYesodBreadcrumbs "Example" resourcesExample -- creates breadcrumbsExample
> and a hierarchy useful for building Menus
> mkYesodHierarchy "Example" resourcesExample -- creates a nested table of
> (Route, Html) pairs
> The menu list could also be pulled from the data, with possible few options.
> _______________________________________________
> web-devel mailing list
> web-devel at haskell.org
> http://www.haskell.org/mailman/listinfo/web-devel

More information about the web-devel mailing list