Самодельный пользовательский объект, проводка в шаблонах - PullRequest
1 голос
/ 21 января 2012

Поскольку мне приходится работать с существующей базой данных, я написал свой собственный тип User для своего приложения. Он работает нормально, но у меня проблемы с подключением шаблонов для него.

Черта ProtoUser , которую я использовал, предоставляет множество функциональных возможностей, даже собственный метод sitemap. В этом нет ничего плохого, но мне нужно, чтобы оно было Hidden.

Затем я попытался создать свои собственные Menu экземпляры для них. Они в точности соответствуют определенным в черте ProtoUser, но они просто не работают.

Это мой текущий SiteMap. Полный код здесь здесь .

    val entries = List(
      Menu.i("Home") / "index" >> Hidden,
      Menu.i("Branches") / "branches",
      Menu.i("Ponies") / "ponies",
      Menu.i("Profile") / "profile" >> If(() => User.loggedIn_?, "You must be logged in"),

/*      Menu.i("Login") / "login" >> Hidden >> Template(() => User.wrapIt(User.login)) >> If(() => User.notLoggedIn_?, "Already logged in"),
        Menu.i("Logout") / "logout" >> Hidden >> Template(() => User.wrapIt(User.logout)) >> If(() => User.loggedIn_?, "You must be logged in"),
        Menu.i("Sign Up") / "signUp" >> Hidden  >> Template(() => User.wrapIt(User.signup)) >> If(() => User.notLoggedIn_?, "Already logged in"),*/

      Menu(Loc("Static", Link(List("static"), true, "/static/index"),
        "Static Content", Hidden))
    ) ::: User.sitemap

Может быть, кто-то может помочь мне, как скрыть это User.sitemap? Или как это должно быть сделано, я привык к каркасу с явной маршрутизацией.

1 Ответ

1 голос
/ 08 февраля 2012

Проверьте класс ProtoUser структуры лифта в net.liftweb.proto, где определены пункты меню.

В вашем классе User вы можете переопределить эти пункты меню,например:

override protected def editUserMenuLocParams: List[LocParam[Unit]] =
  Hidden :: //hides it but still reachable
  Template(() => wrapIt(editFunc.map(_()) openOr edit)) ::
  testLogginIn ::
  Nil

или для полной деактивации:

override def editUserMenuLoc: Box[Menu] = Empty //not reachable

Затем в вашем Boot напишите что-то вроде:

def sitemap() = SiteMap(
  Menu("Home") / "index" >> Hidden >> User.AddUserMenusAfter)
...