2012-01-12 8 views
0

サイトマップを使用すると、プレフィックスマッチングで動作する特定のパスを設定し、サブパスの要求を許可することができます。私は指定されたパスの下のすべての要求が特定のテンプレートに行くように指定したいと思います。サイトマップのLocで使用されるテンプレートを定義します

Menu(Loc("show_theme", Link("show" :: "theme" :: Nil, true, "/show/theme"), "Show Theme")) 

は/ショー/テーマ/ *(それがないもの)へのすべての要求をキャッチするが、(それはない)

/ショー/テーマでテンプレートを使用してそれらを提供:だから私は希望します

/show/theme/1に/ show/theme/1にテンプレートを使用して、その中のスニペットを使用してIDをReqから引き出したいとします。

これは可能ですか?あるいは私は間違ったやり方でやっていますか?現時点では、私は/ show_theme?theme = 1を使用していますが、これはちょっと醜いので、フォームの操作が難しくなります。

EDIT:CGIパラメータを使用してIDをエンコードするのを止めようとしています。それらをパス構造の一部として保持する

答えて

2

Locは1ページと1つのテンプレートを表します。複数のURLをLocにマップする場合は、リフトのURLリライティングを使用するよりも使いたいでしょう。たとえば:?それは何をするか

LiftRules.statefulRewrite.append { 

    case RewriteRequest(ParsePath("show" :: "theme" :: theme :: Nil, _, _, _), _, _) => 
    RewriteResponse(ParsePath("show_theme" :: Nil, "", true, false), Map("theme" -> theme), false) 

} 

は、対戦要求ショー/テーマ/ * /および/ show_themeテーマ= {}テーマにそれらを書き換えるです。あなたはそのURLに応答するLocを作成し、テーマ変数にクエリパラメータ(S.param( "theme"))としてアクセスします。

注:Loc DSLを使用すると、これをより簡潔に行うことができますが、舞台裏で何が起こっているのかを理解することは良いことだと思います。

さらに詳しいヘルプが必要な場合は、Lift Google Groupにメッセージを投稿することをおすすめします。私はあなたがそうであるよりも速く答えを見つけるだろうと思う。

+0

OK、それは役に立ちますが、私がしたいことはあまりしません。質問を明確にしようとしました。私はLocが常に1つのページ/テンプレートを表しているとは確信していませんが、プレフィックスが一致すると、任意の数のページ/テンプレートになります。私は単一のテンプレートを使用して任意の数のページに変換したいですが、CGIパラメータは使用しないでください。 –

+0

私が提供したコード例では、URLに実際にクエリパラメータが含まれている必要はなく、/ show/theme/{theme}の部分を大括弧で書き換えてスニペットに関する質問パラメータに見えるようにします。 –

+0

Ooops、私の誤解 - 私は(愚かなことに)リダイレクトを引き起こすと想定しましたが、もちろんそうではありません。最初のリスト( "show" :: "theme" :: theme :: Nil)の終わりにNilを置く必要がありましたが、完璧に動作します、ありがとうございました! –

関連する問題