Определите шаблон для использования в Loc в карте сайта - PullRequest
0 голосов
/ 12 января 2012

Используя файл Sitemap, можно задавать определенные пути для работы с сопоставлением префиксов и разрешать обработку запросов на подпути.Я хотел бы указать, что все запросы ниже указанного пути идут к определенному шаблону.Поэтому я хотел бы:

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

перехватывать все запросы к / show / theme / * (что он делает), но обслуживать их, используя шаблон в / show / theme (что не делает)

Я хочу (например) / show / theme / 1 использовать шаблон в / show / theme и фрагменты в нем, чтобы извлечь идентификатор из запроса.

Возможно ли это?Или я делаю вещи неправильно?В настоящее время я использую / show_theme? Theme = 1, но это немного уродливо и затрудняет работу с формами

РЕДАКТИРОВАТЬ: я пытаюсь отказаться от использования параметров CGI для кодирования идентификаторови сохраните их как часть структуры пути

1 Ответ

2 голосов
/ 12 января 2012

Loc представляет одну страницу и один шаблон.Если вы хотите сопоставить несколько URL-адресов с Loc, чем вы хотите использовать переписывание URL-адреса Lift.Например:

LiftRules.statefulRewrite.append {

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

}

Что нужно сделать, это сопоставить запросы с / show / theme / * и переписать их в / show_theme? Theme = {theme}.Вы создаете свой Loc для ответа на этот URL-адрес и получаете доступ к переменной темы в качестве параметра запроса (S.param ("theme")).

Примечание. Это можно сделать более кратко, используя Loc DSL.но я думаю, что хорошо понимать, что происходит за кулисами.

Если вам нужна дополнительная помощь, я бы посоветовал вам отправить сообщение в Lift Google Group .Я думаю, вы найдете там ответы быстрее, чем на SO.

...