使用Lift </title>更改<title>

时间:2011-02-15 17:38:02

标签: scala dynamic title lift

是否可以动态切换Lift提供的网页标题,而无需为该特定情况编写额外的代码段?

一个选项当然是<lift:mySnippet><title>Default Title</title></lift:mySnippet>但我认为<head_merge><title>New Title</title></head_merge>可能有一个选项(插入第二个标题节点)。

我不喜欢第一种方法,因为我不想将所有标题生成逻辑都放在一个片段中,并询问我在哪个页面等。

2 个答案:

答案 0 :(得分:8)

您是否尝试过使用模板?

您可以在templates-hidden/default.html中定义模板,如下所示:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:lift="http://liftweb.net/">

    <head>
        <title>
            <lift:bind name="title" />
        </title>

        ...
    </head>

    <body>
        <lift:bind name="content" />
    </body>
</html> 

并在index.html中使用它,例如:

<lift:surround with="default">
    <lift:bind-at name="title">Home</lift:bind-at>
    <lift:bind-at name="content">
        my content
    </lift:bind-at>
</lift:surround>

您可以在此处找到有关模板的更多信息:

http://www.assembla.com/spaces/liftweb/wiki?id=liftweb&wiki_id=Templates_and_Binding

答案 1 :(得分:1)

一种方法是使用Menu.title代码段。

bootstrap/liftweb/Boot.scala中,您使用网页名称定义站点地图:

class Boot {
  def boot {
    // ...
    def sitemap = SiteMap(
      Menu.i("Home") / "index",
      Menu.i("About") / "about")
    // ...
  }
}

templates-hidden/default.html中,您可以使用代码段:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:lift="http://liftweb.net/">
<head>
  ...
  <title class="lift:Menu.title">AppName:</title>
  ...

然后页面标题将是:“AppName:Home”和“AppName:About”。如果您使用

,这很好
<span class="lift:Menu.builder"></span>

构建菜单,因为页面标题与菜单中使用的相同。

另一种方法是使用head merge并在页面的html中定义标题。要实现此目的,您必须从<title>中删除templates-hidden/default.html标记,并在内容块中添加<head><head_merge>标记:

<!DOCTYPE html>
<html>
  <body class="lift:content_id=main">
    <div id="main" class="lift:surround?with=default;at=content">
    <head_merge>
      <title>TITLE OF THIS PAGE HERE</title>
    </head_merge>
    ...