2016-08-13 25 views
0

使用FreeMarker,我希望能夠在不同的模板中加載不同的樣式表或JavaScript文件。我的問題可能在我的實施中。使用Freemarker每頁使用不同的CSS或Java腳本

我有一個宏觀佈局,看起來像這樣:

<#macro layout> 
 

 
<!DOCTYPE html> 
 
<html lang="en"> 
 
    <head> 
 
    <!-- common javascript and css references here --> 
 
    </head> 
 

 
    <body> 
 
    <div class="container"> 
 

 
     <!-- header stuff --> 
 

 
     <#nested> 
 

 
     <!-- footer stuff --> 
 

 
    </div> 
 
    </body> 
 
</html> 
 

 
</#macro>

我用這個在所有的模板是這樣的:

<!-- "declare" specific css or js here --> 
 
<@layout.layout> 
 

 
<div id="mapid"> 
 

 
    <!-- use specific css or js --> 
 

 
</div> 
 

 
</@layout.layout>

在我的一些模板中,我想使用適用於常見情況的特定樣式表或JavaScript庫。什麼是最好的方法呢?

我試過將變量傳遞給佈局宏來插入css和js引用,但我發現沒有簡單的方法來使用#assign分配一段文本。

+0

不知道你在哪裏卡住了,或者你爲什麼需要塊分配(看起來像'<#local foo> ...'或者'#assign'或'#global'一樣)。首先,根據你想要決定包含哪些CSS或JS?就像,你想要MVC控制器來決定,還是要將它編碼到模板中,還是希望它取決於模板位置,或者......? – ddekany

+0

決定包含不同的JavaScript或CSS取決於模板的用途。例如,我有一個用於顯示報告的模板。沒有任何其他模板需要我用來做這件事的JavaScript的理由。感謝您的迴應。我將調查<#local>。 – pdeline

+0

@ddekany我看不到<#local>會幫助我。它只能用於宏或函數。我沒有在任何情況下。 – pdeline

回答

0

我將佈局分隔成頁面開始結束頁面結束,並定義嵌套在頁面開始。

page_start.ftl

<#macro external> 
 
<!DOCTYPE html> 
 
<html> 
 
<head lang="en"> 
 
    <meta charset="UTF-8"> 
 
    <title>${title}</title> 
 
    <meta name="keywords" content="${keyword}"> 
 
    <meta name="description" content="${description}"> 
 

 
    <link href="https://cdn.insdep.com/themes/1.0.0/easyui.css" rel="stylesheet" type="text/css"> 
 
    <link href="https://cdn.insdep.com/themes/1.0.0/easyui_animation.css" rel="stylesheet" type="text/css"> 
 

 
    <script type="text/javascript" src="https://cdn.insdep.com/jquery/jquery-1.11.3.min.js"></script> 
 
    <script type="text/javascript" src="https://cdn.insdep.com/easyui/jquery.easyui-1.5.1.min.js"></script> 
 

 
    <#nested > 
 

 
</head> 
 
<body> 
 

 
    <#include "global/header.ftl"> 
 

 
    <#include "global/sidebar.ftl"> 
 

 
</#macro>

page_end.ftl

<#include "global/footer.ftl"> 
 

 
</body> 
 
</html>

<#import "page_start.ftl" as page> 
 
<@page.external> 
 
    <link href="https://cdn.insdep.com/themes/1.0.0/easyui_plus.css" rel="stylesheet" type="text/css"> 
 
</@page.external> 
 
hello world 
 

 
<#include "page_end.ftl">

但我確實認爲,這不是一個非常體面的解決方案。

0

可以聲明嵌套的標籤和發送作爲一個參數像這樣的名字:

layout.ftl

<#macro layout> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <!-- common javascript and css references here --> 
    <#nested "styles"> 
    <#nested "scripts"> 
    </head> 

    <body> 
    <div class="container"> 

     <!-- header stuff --> 

     <#nested "content"> 

     <!-- footer stuff --> 

    </div> 
    </body> 
</html> 

</#macro> 

然後你就可以得到作爲參數的部分,如果像這樣使用:

page.ftl

<@layout.layout; section> 
<#if section = "scripts"> 
    <script src="/js/myscripts/myfile.js"></script>  
</#if> 
<#if section = "styles"> 
    <link rel="stylesheet" href="/css/style.css" /> 
</#if> 

<#if section="content"> 
    <div id="mapid"> 

    </div> 
</#if> 

</@layout.layout>