Hi Alex,
I am making a CMS, so I had to get database content for any page up to
4 levels under the URL http://site/page/leve1/level2/etc ... Here is
some example code from this:
class Boot {
def selectTemplate(template: String, subPages: List[String]):
RewriteResponse =
{
var levels = Map() ++ (List[String]("level1", "level2",
"level3", "level4") zip subPages)
levels = levels + ("totalLevels" -> levels.size.toString)
RewriteResponse(template :: Nil, levels)
}
def boot {
... lots of stuff
LiftRules.rewrite.prepend(NamedPF("inner pages")
{
case RewriteRequest(ParsePath("page" :: subPages, _, _, _),
_, _) => selectTemplate("innerpage", subPages)
case RewriteRequest(ParsePath("intercitizen" :: subPages, _,
_, _), _, _) => selectTemplate("intercitizentemplate", subPages)
})
This means that anything that goes to http://site/page/one/two goes to
a file called innerpage.html and the innerpage.html contains
<lift:surround with="default" at="content">
<div style="margin-left:15px !important; margin-right:15px !important;
margin-top:8px !important;">
<lift:Content.display>
</lift:Content.display>
</div>
</lift:surround>
And the snippit contains
package com.orsa.iom3.snippet
import xml.{Text, NodeSeq}
import net.liftweb.http.S
import com.orsa.iom3.model.SiteContent
import net.liftweb.util.{Log, Helpers}
import com.orsa.util.Constants
/**
*/
class Content
{
def display(in: NodeSeq): NodeSeq =
{
//val name = S.attr("name") openOr "0"
// Get the site content from the database
val totalLevels:String = S.param("totalLevels") openOr "0"
// Build the path for the levels
var path = Constants.CMS_ROOT_PATH
for (i <- 1 to totalLevels.toInt)
path = path + Constants.CMS_PATH_SEP + S.param("level" +
i).openOr("0")
val content:SiteContent = SiteContent.findByUniqueName(path)
openOr new SiteContent
// Return the content inside a DIV
<div>{scala.xml.Unparsed(content.page_Content_Html.toString)}</
div>
}
}
On 2月6日, 上午9時14分, Alex Black <[email protected]> wrote:
> Hi, I'd like to rewrite a url like this:
>
> /manufacturer/product
>
> e.g.
>
> LiftRules.statelessRewrite.append( {
> case RewriteRequest(
> ParsePath( manufacturerName :: productName :: Nil, _, _,_), _,
> _) =>
>
> RewriteResponse("productView" :: Nil)
> })
>
> But, I'd like to the ParsePath case to not 'catch' for non-existant
> manufacturers, and non-existant products by the manufacturer.
>
> So, I might do this:
>
> LiftRules.statelessRewrite.append( {
> case RewriteRequest(
> ParsePath( Manufacturer(manufacturer) :: Product(product) ::
> Nil, _, _,_), _, _) =>
>
> RewriteResponse("productView" :: Nil)
> })
>
> Where Manufacturer and Product objects provide an extractor which does
> a lookup.
>
> However, the product lookup depends on the manufacturer.. is there a
> way to handle that?
>
> ideas:
> 1. use an if guard
>
> case RewriteRequest(
> ParsePath( Manufacturer(manufacturer) :: productName :: Nil,
> _, _,_), _, _) if manufacturer.contains(productName) =>
> val product = manufacturer.getProduct(productName)
>
> sucks because it looks up the product twice.
>
> 2. some time of nested case?
>
> case RewriteRequest(
> ParsePath( Manufacturer(manufacturer) :: Product(manufacturer,
> product) :: Nil, _, _,_), _, _) =>
>
> obviously doesn't work..
>
> any suggestions welcome, thanks!
>
> - Alex
--
You received this message because you are subscribed to the Google Groups
"Lift" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=en.