David, Looks like I can incorporate the functionality I need just by writing my own Loc implementation. Cool. There's a lot going on in your code so I need to work through it, but seems like it's all there.
Thanks, Glenn... On Jun 12, 3:32 pm, David Pollak <feeder.of.the.be...@gmail.com> wrote: > So, you want custom content with menus generated from the database... > well... > > class BaseContentLoc(val name: String, _aspect: String) extends > Loc[CustomContent] { > // the name of the page > // def name = "Content" > > val BaseAspect = _aspect > > def defaultParams = Full(ContentLocStuff.NullCustomContent) > > override def forceParam = defaultParams > > // the default parameters (used for generating the menu listing) > override def additionalKidParams = > CustomContent.findAll(By(CustomContent.aspect, BaseAspect), > > OrderBy(CustomContent.displayOrder, Ascending)) > > // no extra parameters > def params = List(Loc.PlaceHolder, Loc.Template(myTemplate)) > > def myTemplate() = > <lift:surround with="default-final" at="content"><lift:display > /></lift:surround> > > /** > * Generate a link based on the current page > */ > val link = > new Loc.Link[CustomContent](List(BaseAspect), false) { > override def createLink(in: CustomContent) = { > Full(Text("/"+urlEncode(BaseAspect)+"/"+urlEncode(in.page))) > } > } > > /** > * What's the text of the link? > */ > val text = new Loc.LinkText(calcLinkText _) > > def calcLinkText(in: CustomContent): NodeSeq = { > if (in.page.length > 0) Text(in.page) else Text(name) > } > > object Finder { > def unapply(page: String): Option[CustomContent] = > CustomContent.findContent(page, BaseAspect) > } > > /** > * Rewrite the request and emit the type-safe parameter > */ > override val rewrite: LocRewrite = > Full({ > case RewriteRequest(ParsePath(BaseAspect :: Finder(content) :: Nil, > _, _, _), _, _) => > (RewriteResponse(BaseAspect :: Nil), content) > }) > > /** > * Check for page-specific snippets and > * do appropriate dispatching > */ > override val snippets: SnippetTest = { > case ("display", Full(v)) => display(v) _ > } > > def display(v: CustomContent)(in: NodeSeq) = v.content openOr in > > } > > This will autogenerate submenus based on a DB lookup of CustomeContent. > > Does this help achieve your longer term goal? > > Thanks, > > David > > > > On Fri, Jun 12, 2009 at 3:20 PM, glenn <gl...@exmbly.com> wrote: > > > David, > > > Here's my scenario. I've got about 30 menus organized into about 7 or > > 8 groups. Thanks to > > help from you and Derek and others in this discussion, I can display > > nested menus in > > groups as a horizontal superfish menu. > > > Using URL Rewriting, as described in the master lift book, I created a > > method: > > > def rewrite:LiftRules.RewritePF = { > > //Services > > case RewriteRequest( > > ParsePath(List("services"),_,_,_),_,_) => > > RewriteResponse("content" :: Nil, Map("tag" -> > > "services")) > > case RewriteRequest( > > ParsePath(List("services","coreguard"),_,_,_),_,_) => > > RewriteResponse("content" :: Nil, Map("tag" -> > > "coreguard")) > > case RewriteRequest( > > ParsePath(List("services","estatePlanning"),_,_,_),_,_) => > > RewriteResponse("content" :: Nil, Map("tag" -> > > "estatePlanning")) > > case RewriteRequest( .... > > > ... > > } > > > That sends all my requests to a content.html template: > > > <lift:surround with="default" at="content"> > > <span><h3><lift:MySnippets.content> > > <c:title/> > > </lift:MySnippets.content> > > </h3></span> > > </lift:surround> > > > The snippet is just as riduculously simple: > > > def content(xhtml:NodeSeq):NodeSeq = { > > val c = S.param("tag") openOr "" > > > bind("c", xhtml, > > "title" -> S.?(c)) > > } > > > This navigation works, though is repititious. > > It would be relatively easy to extend this idea to generate menus, > > complete with navigation, programatically (say, from an xml file or a > > data table) and allow > > site administrators and other users to drag-and-drop menus as desired. > > > The point of all this, in my view, is to eventually populate > > content.html with data/documents/templates/atom feeds, whatever, with > > nothing > > more than the RewriteResponse Map parameter, and voila, you have a > > fledgling CMS built with relatively few lines of code. > > > If you have some alternative ideas for creating a programatic > > navigation system, I would be very interested. > > > Glenn... > > > On Jun 12, 2:39 pm, David Pollak <feeder.of.the.be...@gmail.com> > > wrote: > > > On Fri, Jun 12, 2009 at 10:44 AM, glenn <gl...@exmbly.com> wrote: > > > > > RewriteRequest isn't working in my app, so I must be doing something > > > > wrong, or leaving something important out. > > > > > I have a menu in my siteMap: > > > > > Menu(Loc("contact", List("info", "contact"), "Contact Us", LocGroup > > > > ("info"))) > > > > > My boot.scala contains this: > > > > > LiftRules.rewrite.append { > > > > case RewriteRequest( > > > > ParsePath(List("info","contact"),_,_,_),_,_) => > > > > RewriteResponse("content" :: Nil, Map("tag" -> > > > > "contact")) > > > > ... > > > > } > > > > > And I have a content.html page in webapp. > > > > I think there's a better way to achieve what you want... lemme know > > together > > > some code for you. > > > > > Clicking on the "Contact Us" menu returns an HTTP 403 error, not > > > > content.html. > > > > > Any help would be appreciated. > > > > > Glenn... > > > > -- > > > Lift, the simply functional web frameworkhttp://liftweb.net > > > Beginning Scalahttp://www.apress.com/book/view/1430219890 > > > Follow me:http://twitter.com/dpp > > > Git some:http://github.com/dpp > > -- > Lift, the simply functional web frameworkhttp://liftweb.net > Beginning Scalahttp://www.apress.com/book/view/1430219890 > Follow me:http://twitter.com/dpp > Git some:http://github.com/dpp --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---